0%

Matplotlib

简介

官方网站

matplotlib.pyplot是最方便的子库

1
import matplotlib.pyplot as plt

常见功能

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#多图合并,2行3列第一区域
plt.subplot(2,3,1)

#画出一条折线图,横坐标是这个数的索引(0,1,2,3,4)
plt.plot([3,1,4,5,2])

#纵坐标名称
plt.ylabel('grade')
plt.xlabel('name')

#其他文本显示
plt.title()
plt.text(x,y,内容,fontsize=20)#在任意位置增加文本,xy是文本开始的坐标
plt.annotate()#在图形中增加带箭头的注解

#带箭头的文本
plt.annotate(s(解释的内容), xy=arrow_crd(箭头开始位置),
xytext=text_crd(文本位置), arrowprops=dict(字典描述箭头属性))
plt.annotate('$\mu=100$',xy=(2,1),xytxt=(3,1.5),
arrowprops=dict(facecolor='black',shrink=0.1,width=2))

#展示图形
plt.show()
#保存图形
plt.savefig('test.tif', dpi = 300)

#两个参数,分别控制x轴和y周,先x后y
plt.plot([0,2,4,6,7],[3,1,4,5,2])
#设置x,y轴参数范围
plt.axis([-1,10,0,6])

#设置中文字体(改变全局字体,包括坐标轴上的数字)
matplotlib.rcParams['font.family']='Kaiti'or'SimHei'
or'LiSu'or'FangSong'or'YouYuan'or'STSong'
matplotlib.rcParams['font.style']='normal' or 'italic'
matplotlib.rcParams['font.size']='large' or 'x-small'

#设置中文字体(改变部分字体)
在有中文输出的地方,增加一个属性:fontproperties
plt.xlabel('横轴:时间', fontproperties='SimHei',
fontsize=20,color = 'green')
#增加网格
plt.grid(True)

plot函数

参数 plt.plot(x,y,format_string, **kwargs)
x x轴上的数据,列表或numpy数组
y y轴上的数据,列表或numpy数组
format_string 颜色字符、风格字符和标记字符,可选
**kwargs 第二组或更多(x,y,format_string)
—-颜色— —-颜色—
‘r’,’g’,’b’,’y’,’k’,’w’ 红绿蓝黄黑白
‘c’ 青绿色cyan
‘#008000’ RGB某颜色
‘m’ 洋红色magenta
‘0.8’ 灰度值字符串
—直虚线— —直虚线—
‘‐’ 实线
‘‐‐’ 破折线
‘‐.’ 点划线
‘:’ 虚线
‘ ‘ 无线条
标记字符 说明 标记字符 说明 标记字符 说明
‘.’ 点标记 ‘1’ 下花三角 ‘h’ 竖六边形
‘,’ 像素标记(极小点) ‘2’ 上花三角 ‘H’ 横六边形
‘o’ 实心圈标记 ‘3’ 左花三角 ‘+’ 十字
‘v’ 倒三角标记 ‘4’ 右花三角 ‘x’ x
‘^’ 上三角标记 ‘s’ 实心方形 ‘D’ 菱形
‘>’ 右三角标记 ‘p’ 实心五角 ‘d’ 瘦菱形
‘<’ 左三角 ‘*’ 星形 ‘|’ 垂直线

另一种改变线条方式:

参数 plt.plot(x, y, format_string, **kwargs)
color 控制颜色, color=’green’
linestyle 线条风格, linestyle=’dashed’
marker 标记风格, marker=’o’
markerfacecolor 标记颜色, markerfacecolor=’blue’
markersize 标记尺寸, markersize=20

复杂绘图区域

1
2
3
4
5
6
7
8
9
10
11
12
13
plt.subplot2grid(GridSpec, CurSpec, colspan=1, rowspan=1)
例子:
plt.subplot2grid((3,3), (1,0), colspan=2)
第一个参数,将区域分成3*3类型
选定的位置,第一行,0
colspan延伸,横着向右延伸为2
rowspan向下延伸

plt.subplot2grid((3,3),(0,0),colspan=3)
plt.subplot2grid((3,3),(1,0),colspan=2)
plt.subplot2grid((3,3),(1,2),rowspan=2)
plt.subplot2grid((3,3),(2,0))
plt.subplot2grid((3,3),(2,0))

第二种方法:

1
2
3
4
5
6
7
8
import matplotlib.gridspec as gridspec
gs = gridspec.GridSpec(3,3)

ax1 = plt.subplot(gs[0,:])
ax2 = plt.subplot(gs[1,:-1])
ax3 = plt.subplot(gs[1:,-1])
ax4 = plt.subplot(gs[2,0])
ax5 = plt.subplot(gs[2,1])

常见图形绘制方法

函数 说明
plt.plot(x,y,fmt,…) 绘制一个坐标图
plt.boxplot(data,notch,position) 绘制一个箱形图
plt.bar(left,height,width,bottom) 绘制一个条形图
plt.barh(width,bottom,left,height) 绘制一个横向条形图
plt.polar(theta, r) 绘制极坐标图
plt.pie(data, explode) 绘制饼图
plt.psd(x,NFFT=256,pad_to,Fs) 绘制功率谱密度图
plt.specgram(x,NFFT=256,pad_to,F) 绘制谱图
plt.cohere(x,y,NFFT=256,Fs) 绘制X‐Y的相关性函数
plt.scatter(x,y) 绘制散点图,其中,x和y长度相同
plt.step(x,y,where) 绘制步阶图
plt.hist(x,bins,normed) 绘制直方图
plt.contour(X,Y,Z,N) 绘制等值图
plt.vlines() 绘制垂直图
plt.stem(x,y,linefmt,markerfmt) 绘制柴火图
plt.plot_date() 绘制数据日期
  • plt.pie()
1
2
3
4
5
6
7
8
9
10
11
#饼图
import matplotlib.pyplot as plt
labels = 'Frog', 'Hogs', 'Dogs', 'Logs'
sizes = [15,30,45,10]
explode = (0,0.1,0,0)
#尺寸,哪一快突出,标签,字体格式,阴影关闭,其实数据角度
plt.pie(sizes, explode=explode, labels=labels,autopct=%1.1f%
,shadow=False, startangle=90)
#xy等距离,饼图是正向看着的
plt.axis('equal')
plt.show()
  • plt.hist()
1
2
3
4
5
6
7
8
9
#直方图,从所有数据中均等的选取某些数据,第二个参数确定参数的个数
import matplotlib.pyplot as plt
import numpy as np
np.random.seed(0)
mu, sigma=100,20#均值和标准差
a = np.random.normal(mu, sigma, size=100)
plt.hist(a,10,normed=1,histtype='stepfilled',facecolor='b',alpha=0.75)

plt.show()
  • 极坐标图
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import matplotlib.pyplot as plt
import numpy as np

N = 20
theta = np.linspace(0.0,2*np.pi,N,endpoint=False)
radii = 10*np.random.rand(N)
width = np.pi/4*np.random.rand(N)
#打开极坐标绘图选项
ax = plt.subplot(111,projection='polar')
bars = ax.bar(theta,radii,width=width,bottom=0.0)

for r,bar in zip(radii,bars):
bar.set_facecolor(plt.cm.viridis(r/10.0))

plt.show()
  • 散点图
1
2
3
4
5
6
7
8
import matplotlib.pyplot as plt
import numpy as np
#面向对象编程
fig, ax=plt.subplots()#默认绘制区域为111
ax.plot(10*random.randn(100),10*random.randn(100),'o')
ax.set_title('Simple Scatter')

plt.show()