目录
- 简介
- pyplot能绘制哪些图
- 绘制二维图plot
- 绘制三维图
- 绘制饼图
- 绘制直方图
- 绘制极坐标图
- 绘制散点图
- 显示中文
- 保存图像
- 坐标轴尺度
- 文本显示
- 显示背景网格
- 绘制子绘图区域
简介
matplotlib是一个python画图的库。具体参考http://matplotlib.org/api
pyplot能绘制哪些图
pyplot有两种绘图的方法,即面向对象绘图和面向过程绘图。面向对象一般先用plt.subplot()获得对象,然后调用对象的方法。而面向过程绘图直接调用plt的方法来绘图。以绘制散点图为例:
#面向对象
ax = plt.subplot(111)
ax.scatter([1,2,3],[2,3,4])
plt.show()
#面向过程
plt.scatter([1,2,3],[2,3,4])
plt.show()
下面是面向过程绘图的一些函数方法
函数 | 功能 |
plt.plot | 坐标图 |
plt.boxplot | 箱型图 |
plt.bar | 条形图 |
plt.barh | 横向条形图 |
plt.polar | 极坐标图 |
plt.pie | 饼图 |
plt.psd | 功率谱密度图 |
plt.specgram | 普图 |
plt.cohere | x-y的相关性函数 |
plt.scatter | 散点图 |
plt.step | 步阶图 |
plt.hist | 直方图 |
plt.contour | 等值图 |
plt.vlines | 垂直图 |
plt.stem | 柴火图 |
plt.plot_date | 绘制数据日期 |
绘制二维图plot
plot
plot(x,y,format_string)
plot功能是把给出的点的次序把点用直线连起来。注意坐标必须是一维的,像[[1,2,3]]这种二维坐标就会无法显示。
示例图:
可用plot函数来实现,但是plot函数连线是按坐标给出的顺序依次连接各点的。所以必须先对X进行排序,之后再调用plot函数。示例代码(图中曲线):
`index = x.argsort(0);
x =x[index][:,0];
ypredict = ypredict[index][:,0];
ax.plot(x,ypredict);
- 参数给出两个坐标向量
import matplotlib.pyplot as plt;#引入
def getPlot(X,y,w):#三个参数,数据集,结果集,权重
fig = p.figure();
ax = fig.add_subplot(111);#添加画布,111指把画布分为1行1列,而图画在从左向右从上到下第一块。
ax.scatter(X[:,1],y);#散点图(scatter是绘制散点图。第一个参数是x坐标,第二个是y坐标)
ax.plot(X[:,1],X*w);#拟合直线(plot是绘制直线。两个点就可以确定一条直线)
p.show();#显示
- 参数是一个坐标向量或矩阵
当参数是一个坐标向量时,默认给出的是y轴坐标,x轴从0开始计数,即为坐标向量的索引。
如:ax.plot([1,2,3,4]);
当参数是一个矩阵时,默认把每列的数值看成一条线的y轴坐标,x轴坐标从0开始。每列画出一条线,有几列就画几条线。
如:ax.plot([[1,2,3,4],[2,3,4,5],[6,7,8,9]]);
- 格式控制
用法:plot(x,y,format_string,keywords_args)
例:plot(x,y,'r--+')
或plot(x,y,color='red',linestyle='--',marker='+')
(格式控制可以用两种方式实现,(1)全写在一个format_string字符串中,顺序是颜色,风格,标记。(2)使用关键字参数color,linestyle,marker,markerfacecolor(标记颜色),markersize指定,但关键字参数必须放在最后。) - 颜色
颜色字符 | 说明 |
‘b’ | 蓝色 |
‘g’ | 绿色 |
‘r’ | 红色 |
‘c’ | 青绿色 |
‘m’ | 洋红色 |
‘y’ | 黄色 |
‘k’ | 黑色 |
‘w’ | 白色 |
‘#008000’ | RGB某颜色 |
‘0.8’ | 灰度值字符串 |
- 风格
风格字符 | 说明 |
‘-‘ | 实线 |
‘–’ | 破折线 |
‘-.’ | 点划线 |
‘:’ | 虚线 |
’ ‘ | 无线条 |
- 标记
标记字符表明数据点的以什么样的形状标记出来(比如我们用两个点画了一条直线,那么这两个点如何在图中标记出来。)
标记字符 | 说明 |
‘.’ | 点标记 |
‘,’ | 像素标记(极小点) |
‘^’ | 上三角 |
‘v’ | 倒三角 |
‘>’ | 右三角 |
‘<’ | 左三角 |
‘o’ | 实心圈标记 |
‘1’ | |
‘2’ | |
‘3’ | |
‘4’ | |
’s’ | 实心方形 |
‘p’ | 实心五角 |
‘*’ | 星形标记 |
‘h’ | |
‘H’ | |
‘+’ | 十字 |
‘x’ | |
‘D’ | 菱形 |
‘d’ | |
‘|’ |
- 同时绘制多条曲线
import matplotlib.pyplot as plt
plt.plot(x1,y1,x2,y2,x3,y3)
plt.show()
绘制三维图
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.scatter(x1,x2,x3,c='red');//绘制散点图
ax.plot(l1,l2,l3,c = "green");//绘制直线
#ax.plot([1,2,3],[3,4,1],[8,4,1],'--')
plt.show()
绘制饼图
import matplotlib.pyplot as plt
labels = [1,2,3,4]
sizes = [10,30,40,20]
explode = [0,0.1,0,0]#突出某一块
plt.pie(sizes,explode = explode,labels = labels,autopct="%1.1f%%",shadow = True,startangle = 90)#shadow是否有阴影,startangle旋转角度
plt.axis('equal')#xy坐标尺度相同,即形成一个圆而不是椭圆
plt.show()
效果图:
绘制直方图
import matplotlib.pyplot as plt
import numpy as np
a = np.random.normal(10,4,1000)#高斯分布
plt.hist(a,40,normed = 1,facecolor='r')#40指共分成40个区间,normed=0为落到每个区间的数的个数,normed=1为落到各个区间的频率
plt.show()
效果图:
绘制极坐标图
绘制散点图
显示中文
- windows下
第一种方法:使用matplotlib的rcParams来指定字体。注意这个方法是改变全局字体,所有字体都会被改变。
rcParams的几个常用参数:
参数 | 说明 |
font.family | 字体名字,如SimHei为黑体 |
font.size | 字体大小,整数字号,或者’large’,’x-small’ |
font.style | 字体风格,如正常normal,斜体italic |
中文字体种类 | 说明 |
SimHei | 中文黑体 |
Kaiti | 中文楷体 |
LiSu | 中文隶书 |
FangSong | 中文仿宋 |
YouYuan | 中文幼圆 |
STSong | 华文宋体 |
例:
import matplotlib.pyplot as plt;
plt.rcParams['font.family'] = ['SimHei'] # 用来正常显示中文标签(黑体)
plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号
第二种方法:在需要改字体的地方使用fontproperties属性(推荐),这个不会改变全局字体,只是在需要改变的地方改变字体。
例:
plt.xlabel('好的',fontproperties = 'SimHei',fontsize = 20)
- liunx下
def conf_zh(font_name):
from pylab import mpl
mpl.rcParams['font.sans-serif'] = [font_name]
mpl.rcParams['axes.unicode_minus'] = False
conf_zh('Droid Sans Fallback');
保存图像
plt.savefig('name',dpi)#默认为png格式,dpi为清晰度
注意:savefig必须在show方法之前使用,否则会保存一个空图。
坐标轴尺度
plt.axis([-1,9,0,8])
#即横轴显示从-1到9,纵轴从0到8。
文本显示
pyplot中有以下文本显示函数
函数 | 说明 |
xlabel(),ylabel() | 横轴和纵轴名称 |
title() | 标题 |
text() | 在任意位置添加文字 |
annotate() | 增加带箭头的注释 |
例:
在坐标(2,1)处添加文字μ=1(这里文字可以用latex公式):
plt.text(2,1,'$\mu=1$');
注释:
plt.annotate(s,xy = arrow_crd,xytext = text_crd,arrowprops=dict)
//参数分别为,添加的注释字符串,箭头的位置,注释的位置,其他关键字字典参数
如:
plt.annotate('$\mu=1$',xy=(2,6),xytext=(2.25,6),arrowprops=dict(facecolor='black',shrink=0.1,width=2))//黑色,箭头缩放,箭头宽度
效果图:
显示背景网格
plt.grid(True)
效果图:
绘制子绘图区域
- subplot
plt.subplot(3,2,4)/plt.subplot(324)
#三行两列,当前图像绘制到从左到右,从上到下第4个。 - subplot2grid
subplot2grid(GridSpec,CurSpec,colspan,rowspan)
具体用法如下图所示:
第一个参数指把总区域划分成3行3列。第二个参数指当前选中的区域的最左侧是在几行几列,第三个参数如果是colspan指跨越多少列,如果是rowspan指跨越多少行,当然也可以同时指定colspan和rowspan,指跨越多少行多少列。
想在哪个区域画图,就把画图代码写在此划分代码的下面,如在最上面的那个区域画图:plt.subplot2grid((3,3),(0,0),colspan=3)
plt.plot([1,2,3],[2,4,6],[1,2,3],[3,6,9],[1,2,3],[4,8,12])
- GridSpec