参考官方网站:链接
Matplotlib库的使用,Matplotlib库是由各种可视化类构成,内部结构复杂。matplotlib.pyplot是绘制各类可视化图形的命令子库,相当于快捷方式。
import matplotlib.pyplot as plt
1 matplotlib库小测
x轴默认为列表的索引值。
2 matplotlib库小测综合
3 pyplot的绘图区域
(1)plt.subplot(nrows,ncols,plot_number)
plt.subplot(3,2,4)/plt.subplot(324) 在全局区域中创建一个分区体系,并定位到一个子绘图区域。
(2)plt.subplot2grid()
plt.subplot2grid(GridSpec,CurSpec,colspan=1,rowspan=1)
理念:设定网格,选中网格,确定选中行列区域数量,编号从0开始。
import matplotlib.pyplot as plt
import numpy as np
def f(t):
return np.exp(-t)*np.cos(2*np.pi*t)
a1=np.arange(0,5,0.02)
a2=np.arange(0,10,0.01)
plt.subplot2grid((3,3),(0,0),colspan=3)
plt.plot(a1,f(a1))
plt.subplot2grid((3,3),(1,0),colspan=2)
plt.plot(a1,f(a1))
plt.subplot2grid((3,3),(1,2),rowspan=2)
plt.plot(a2,f(a2))
plt.subplot2grid((3,3),(2,0))
plt.plot(a2,f(a2))
plt.subplot2grid((3,3),(2,1))
plt.plot(a2,f(a2))
plt.show()
(3)GridSpec类(相比于第二种,推荐使用这一种)
import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec
import numpy as np
def f(t):
return np.exp(-t)*np.cos(2*np.pi*t)
a1=np.arange(0,5,0.02)
a2=np.arange(0,10,0.01)
gs=gridspec.GridSpec(3,3)
plt.subplot(gs[0,:])
plt.plot(a1,f(a1))
plt.subplot(gs[1,:-1])
plt.plot(a1,f(a1))
plt.subplot(gs[1:,-1])
plt.plot(a2,f(a2))
plt.subplot(gs[2,0])
plt.plot(a2,f(a2))
plt.subplot(gs[2,1])
plt.plot(a2,f(a2))
plt.show()
4详解plt.plot
plt.plot(x,y,format_string,**kwargs)
x | X轴数据,列表或元组,可选 |
y | Y轴数据,列表或数组。 |
format_string | 控制曲线的格式字符串,可选 |
**kwargs | 第二组或更多的(x,y,format_string) |
当绘制多条曲线时,各条曲线的X值不能省略。
format_string:控制曲线的格式字符串,可选,由颜色字符,风格字符和标记字符组成。
颜色字符 | 说明 | 颜色字符 | 说明 |
‘b’ | 蓝色 | 'm' | 洋红色 |
'g' | 绿色 | 'y' | 黄色 |
'r' | 红色 | 'k' | 黑色 |
'c' | 青绿色cyan | 'w' | 白色 |
'#008000' | RGB某颜色 | '0.8' | 灰度值字符串 |
风格字符 | 说明 |
‘-’ | 实线 |
'--' | 破折线 |
'-.' | 点划线 |
':' | 虚线 |
'' ' ' | 无线条 |
标记字符 | 说明 | 标记字符 | 说明 | 标记字符 | 说明 |
'.' | 点标记 | ‘1’ | 下花三角标记 | ‘h’ | 竖六边形标记 |
',' | 像素标记(极小点) | ‘2’ | 上花三角标记 | 'H' | 横六边形标记 |
'o' | 实心圈标记 | ‘3’ | 左花三角标记 | '+' | 十字标记 |
'v' | 倒三角标记 | ‘4’ | 右花三角标记 | 'x' | x标记 |
'^' | 上三角标记 | ‘s’ | 实心方形标记 | 'D' | 菱形标记 |
'>' | 右三角标记 | 'p' | 实心五角标记 | 'd' | 瘦菱形标记 |
'<' | 左三角标记 | '*' | 星型标记 | '|' | 垂直线标记 |
import matplotlib.pyplot as plt
import numpy as np
a=np.arange(10)
plt.plot(a,a*1.5,'go-',a,a*2,'rx-.',a,a*2.5,'*:',a,a*3,'bD-')
plt.show()
**kwargs:第二组或更多(x,y,**kwargs)
color:控制颜色,color='green'
linestyle: 线条风格,linestyle='dashed'
marker:标记风格,marker='o'
markerfacecolor:标记颜色,markerfacecolor=‘blue’
markersize标记尺寸,markersize=20
5 pyplot的中文显示
法一 pyplot并不默认支持中文显示,需要rcParams修改字体实现。
import matplotlib.pyplot as plt
import matplotlib
matplotlib.rcParams['font.family']='SimHei'
plt.plot([3,1,4,5,2])
plt.ylabel('纵轴(值)')
plt.show()
属性 | 说明 |
'font.family' | 用于显示字体名称 |
'font.style' | 字体风格,正常'normal'或斜体‘italic’ |
'font.size' | 字体大小,整数字号或者‘large’,‘x_small’ |
rcParams['font.family']
字体名称 | 说明 |
‘SimHei’ | 中文黑体 |
'Kaiti' | 中文楷体 |
'LiSu' | 中文隶书 |
'FangSong' | 中文仿宋 |
'YouYuan' | 中文幼圆 |
‘STSong’ | 华文宋体 |
import matplotlib.pyplot as plt
import matplotlib
import numpy as np
a=np.arange(0,10,0.02)
matplotlib.rcParams['font.family']='YouYuan'
matplotlib.rcParams['font.size']=10
plt.xlabel('横轴:时间')
plt.ylabel('纵轴:振幅')
plt.plot(a,np.cos(2*np.pi*a),'bh-.')
plt.show()
法二 在有中文输出的地方,增加一个属性:fontproperties.与法一的优点是,法二并不改变整体的格式,只是改变标签格式,没有改变横纵坐标值的格式,而前者则改变了所有。推荐使用法二
import matplotlib.pyplot as plt
import numpy as np
a=np.arange(0,5,0.02)
plt.xlabel('横轴:时间',fontproperties='SimHei',fontsize=20)
plt.ylabel('纵轴:振幅',fontproperties='YouYuan',fontsize=20)
plt.plot(a,np.cos(2*np.pi*a),'bh-.')
plt.show()
6 pyplot的文本显示函数
函数 | 说明 |
plt.xlabel() | 对X轴增加文本标签 |
plt.ylabel() | 对Y轴增加文本标签 |
plt.title() | 对图像整体增加文本标签 |
plt.text() | 对任意位置增加文本 |
plt.annotate() | 在图形中增加带箭头的注释 |
import matplotlib.pyplot as plt
import numpy as np
a=np.arange(0,5,0.02)
plt.xlabel('横轴:时间',fontproperties='SimHei',fontsize=10,color='green')
plt.ylabel('纵轴:振幅',fontproperties='YouYuan',fontsize=10,color='red')
plt.plot(a,np.cos(2*np.pi*a),'b-')
#latex表示
plt.title(r'正弦波实例$y=cos(2\pi x)$',fontproperties='YouYuan',fontsize=20)
plt.text(2,1,r'$\mu=100$',fontsize=15)
plt.axis([-1,6,-2,2])
plt.grid(True)
plt.show()
import matplotlib.pyplot as plt
import numpy as np
a=np.arange(0,5,0.02)
plt.xlabel('横轴:时间',fontproperties='SimHei',fontsize=10,color='green')
plt.ylabel('纵轴:振幅',fontproperties='YouYuan',fontsize=10,color='red')
plt.plot(a,np.cos(2*np.pi*a),'b-')
#latex表示
plt.title(r'正弦波实例$y=cos(2\pi x)$',fontproperties='YouYuan',fontsize=20)
#plt.annotate(s,xy=arrow_crd,xytext=text_crd,arrowprops=dict)
#Shrink表示箭头指的位置到文本的位置留有一定的空白。
plt.annotate(r'$\mu=100$',xy=(2,1),xytext=(3,1.5),
arrowprops=dict(facecolor='black',shrink=0.1,width=2),fontsize=20)
plt.axis([-1,6,-2,2])
plt.grid(True)
plt.show()
7 pyplot的基础图标函数
饼图
import matplotlib.pyplot as plt
labels='Hui','Hao','Yang','Dong'
sizes=[30,30,20,20] #每个标签对应的百分比
explode=(0.1,0,0,0) #对应于0.1的标签凸出来
plt.pie(sizes,explode=explode,labels=labels,autopct='%.1f%%',shadow=False,startangle=90)
plt.show()
import matplotlib.pyplot as plt
labels='Hui','Hao','Yang','Dong'
sizes=[30,30,20,20] #每个标签对应的百分比
explode=(0.1,0,0,0) #对应于0.1的标签凸出来
plt.pie(sizes,explode=explode,labels=labels,autopct='%.1f%%',shadow=True,startangle=90)
#x轴和y轴的尺寸相同,直立起来
plt.axis('equal')
plt.show()
直方图
import numpy as np
import matplotlib.pyplot as plt
np.random.seed(0)
mu,sigma=100,20 #均值和方差
a=np.random.normal(mu,sigma,100) #生成100个元素,其均值为100,方差为20
#10为bin,直方的个数,即原来的100个数按照最大值,最小值分为10个区间
#density为1表示将元素在某个区间出现的次数归一化为概率。为0则表示出现的个数。
plt.hist(a,10,density=1,histtype='stepfilled',facecolor='b',alpha=0.75)
plt.title('Histogram')
plt.show()
import numpy as np
import matplotlib.pyplot as plt
np.random.seed(0)
mu,sigma=100,20 #均值和方差
a=np.random.normal(mu,sigma,100) #生成100个元素,其均值为100,方差为20
#10为bin,直方的个数,即原来的100个数按照最大值,最小值分为10个区间
#density为1表示将元素在某个区间出现的次数归一化为概率。为0则表示出现的个数。
plt.hist(a,40,density=0,histtype='stepfilled',facecolor='r',alpha=0.75)
plt.title('Histogram')
plt.xlabel('Value')
plt.ylabel('Numbers')
plt.show()
面向对象绘制散点图(简单)
import numpy as np
import matplotlib.pyplot as plt
fig,ax=plt.subplots()#为空默认为111,fig为图像对象,ax为绘图区域对象
ax.plot(10*np.random.randn(100),10*np.random.randn(100),'ro')
ax.set_title('Simple Scatter')
plt.show()