- 一、基本用法
- 1. 基础例子
- 2. 一次生成两个figure,两个函数
- 3. 设置figure和函数的参数
- 二、设置坐标轴
- 三、legend图例
- 四、Annotation标注
- 五、tick能见度
- 六、scatter散点图
- 七、Bar柱状图
- 八、Contours等高线图
- 九、image图片
- 十、3D数据
- 十一、subplot
- 十二、图中图
- 十三、共享轴
- 十四、Animation动画
一、基本用法 1. 基础例子
import numpy as np import matplotlib.pyplot as plt x = np.linspace(-1,1,50) #-1到1均分的50个点 y = x**2 plt.plot(x,y) #绘制线 plt.show()2. 一次生成两个figure,两个函数
import numpy as np import matplotlib.pyplot as plt x = np.linspace(-1,1,50) y1 = x**2 y2 = x**3 plt.figure() #生成第一个figure plt.plot(x,y1) #绘制抛物线 plt.figure() #生成第二个figure plt.plot(x,y2) #绘制三次方程线 plt.show()
figure1
figure2
一个图中两个函数
import numpy as np import matplotlib.pyplot as plt x = np.linspace(-1,1,50) y1 = x**2 y2 = x #num为figure的序号,figsize为figure的长和宽(元组类型) plt.figure(num=3,figsize=(5,5)) plt.plot(x,y1) #线的颜色,线的宽度,线型 plt.plot(x,y2,color='red',linewidth=1.0,linestyle='--') plt.show()二、设置坐标轴
- 设置坐标轴参数(1)
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(-1, 1, 50)
y1 = 2*x+1
y2 = x**2
plt.figure()
plt.plot(x, y1,'r--')
plt.plot(x, y2,'b-')
#1.设置x的范围
plt.xlim((-1, 2))
#在x范围的基础上,进一步划分显示几个点
new_x_lim = np.linspace(-1, 2, 5)
plt.xticks(new_x_lim)
#2.设置y的范围
plt.ylim((-2, 3))
#在y的范围的基础上,给每个对应的点,设置参数。
#(为转义字符,前后加$是为了使得字体美观。)
plt.yticks([-2, 0, 1.5, 3], [r'$very bad$', r'$bad$', r'$medium$', r'$good$'])
plt.xlabel('xxxx') #3.设置x轴的名字
plt.ylabel('yyyy') #4.设置y轴的名字
plt.show()
- 设置坐标轴参数(2)
import numpy as np
import matplotlib.pyplot as plt
ax = plt.gca()
#1.显示框figure 有4条线(left,top,right,bottom)
ax.spines['right'].set_color('none') #使得right线颜色消失。
ax.spines['top'].set_color('none') #使得top线颜色消失。
#2.tick刻度
ax.xaxis.set_ticks_position('bottom') #将x轴设定为bottom那条线
ax.yaxis.set_ticks_position('left') #将y轴2设定为left那条线
#3.对齐
ax.spines['bottom'].set_position(('data',-1)) #将bottom那条线与另外一条线的-1对齐(将x轴与y的-1对齐)
ax.spines['left'].set_position(('data',-1)) #将left那条线与另外一条线的-1对齐(将y轴与x的-1对齐)
plt.show()
三、legend图例
import numpy as np import matplotlib.pyplot as plt x = np.linspace(-1,1) y1 = x y2 = x**2 l1, = plt.plot(x,y1,'r-') #直线 l2, = plt.plot(x,y2,'b--') #抛物线 plt.legend(handles=[l2,l1],labels=['aaa','bbb'],loc='best')
labels设置两条函数线的名字
handles表示需要传入所画线条的实例对象,它和labels一一对应:
例如上例表示 l2直线 对应名字 ‘aaa’ , l1抛物线 对应名字 ’bbb’
loc设置图例的位置
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(-3,3,50)
y = 2*x+1
plt.figure() #spines
plt.plot(x,y) #line
ax = plt.gca()
ax.spines['top'].set_color('none')
ax.spines['right'].set_color('none')
ax.xaxis.set_ticks_position('bottom')
ax.yaxis.set_ticks_position('left')
ax.spines['bottom'].set_position(('data',0))
ax.spines['left'].set_position(('data',0))
#1.设置标注点
x0 = 1
y0 = 2*x0+1
plt.scatter(x0,y0,s=50,color='blue') #标点的大小、标点的颜色
#2.画虚线((x0,y0)和(x0,0)两点连成的虚线)
plt.plot([x0,x0],[y0,0],'b--',linewidth=2.5)
#3.标注右
plt.annotate('2x+1=%s'%y0,xy=(x0,y0),xycoords='data',xytext=(+30,-30),textcoords='offset points',fontsize=16,arrowprops=dict(arrowstyle='->',connectionstyle='arc3,rad=.2'))
#4.标注左
plt.text(-3.7,3,r'$this is text! sigma_i,alpha_j$',fontdict={'size':16,'color':'red'})
plt.show()
- 标注右
第一个参数为标注内容
xy为被注释的坐标点,xycoords=‘data’是为默认情况,即指向注释点
xytext为注释文字的坐标位置(“xytext=(+30,-30),textcoords=‘offset points’,” 可换成“xytext=(2,2), ”)
fontsize为注释大小
arrowprops为箭头参数,参数类型为字典dict
(arrowstyle为箭头类型,connectionstyle为箭头弯曲角度) - 标注左
第一个和第二个参数为注释文本的坐标位置x和y
第三个参数为文本内容
fontdict参数类型为字典类型,size为文本大小,color为文本颜色
注:aa = {'a':1,'b':2} 和 bb = dict(a = 2,b = 3) 输出结果相同
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(-3,3,50)
y = 0.1*x
plt.figure() #spines
plt.plot(x,y,linewidth=10,zorder=1) #line
plt.ylim(-2,2)
ax = plt.gca()
ax.spines['top'].set_color('none')
ax.spines['right'].set_color('none')
ax.xaxis.set_ticks_position('bottom')
ax.yaxis.set_ticks_position('left')
ax.spines['bottom'].set_position(('data',0))
ax.spines['left'].set_position(('data',0))
#1.设置坐标轴上的点的大小
for label in ax.get_xticklabels() + ax.get_yticklabels():
label.set_fontsize(12)
#2.设置坐标轴上的点的背景参数
label.set_bbox(dict(facecolor='w',edgecolor='None',alpha=0.9))
plt.show()
facecolor为坐标轴上的点的背景颜色
edgecolor为边框颜色,alpha为背景框的不透明度
import numpy as np import matplotlib.pyplot as plt #1.设置基本参数 n = 1024 x = np.random.normal(0,1,n) #平均值为1,方差为0,有n个x点 y = np.random.normal(0,1,n) #平均值为1,方差为0,有n个x点 t = np.arctan2(y,x) #颜色参数(好看) #2.散点参数 # s表示散点的大小,c表示散点颜色,alpha为散点的不透明度 plt.scatter(x,y,s=20,c=t,alpha=0.5) plt.xticks(()) #x刻度设为没有 plt.yticks(()) #y刻度设为没有 plt.show()
- 常用用法
import numpy as np import matplotlib.pyplot as plt #参数应该为两个序列或列表 #x为0,1,2,3,4 y为0,1,2,3,4的散点 plt.scatter(np.arange(5),np.arange(5)) plt.show()七、Bar柱状图
import numpy as np
import matplotlib.pyplot as plt
#1.设置基本参数
n = 12
x = np.arange(n)
y = (1-x/float(n))*np.random.uniform(0.5,1.0,n)#均匀分布随机数
#2.bar柱状图描绘
# +y1表示向上的柱状图,facecolor为柱体颜色,edgecolor为柱框颜色
plt.bar(x,+y,facecolor='green',edgecolor='purple')
#3.设置柱状图参数
#前两个参数为标注点的坐标位置(表示相对于默认位置偏移0.01)
#第三个参数为标注内容是y的值且保留两位小数
#ha为左右方向center对齐,va为垂直方向bottom对齐
for i,j in zip(x,y):
plt.text(i+0.01,j+0.01,'%.2f'%j,ha='center',va='bottom')
plt.xlim(-1,n)
plt.ylim(0,1)
plt.show()
八、Contours等高线图
import numpy as np
import matplotlib.pyplot as plt
#1.设置基本参数
def f(x,y):#计算高度的公式
return (1-x/2+x**5+y**3) * np.exp(-x**2-y**2)
n=256
x=np.linspace(-3,3,n)
y=np.linspace(-3,3,n)
#2.x,y组合
X,Y = np.meshgrid(x,y)
#3.Contours图填充颜色
#前三个参数x,y和高度,8表示分为8+2部分不同颜色,alpha为不透明度
#cmap对应的颜色为f(x,y)的值所对应的颜色,hot为偏热的颜色。
plt.contourf(X,Y,f(X,Y),8,alpha=0.75,cmap=plt.cm.hot)
#4.Contours图设置线条
# 8表示分为8+2条线,colors为线条的颜色
C = plt.contour(X,Y,f(X,Y),8,colors='black')
#5.设置线上f(x,y)的参数
plt.clabel(C,inline='True',fontsize=10)
plt.show()
X,Y = np.meshgrid(x,y):
将x中每一个数据和y中每一个数据组合生成很多坐标点,然后将这些坐标点的x坐标放到大X中,y坐标放在大Y中,相应位置是对应的。
import numpy as np import matplotlib.pyplot as plt a = np.random.randn(2,3) #图像分为6块 #1.interpolation为图像格式种类,可网上搜索,origin表示是正还是反plot (lower) # cmap对应的颜色为矩阵a数字所代表的颜色,bone表示一种颜色类型 plt.imshow(a,interpolation='nearest',cmap=plt.cm.bone,origin='upper') #2.右面的柱状的颜色,shrink表示相对于figure显示70%的大小 plt.colorbar(shrink=0.7) plt.show()十、3D数据
import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D x = np.arange(-4,4,0.25) #-4到4步长为0.25的序列 y = np.arange(-4,4,0.25) X,Y = np.meshgrid(x,y)#x和y组合 #1.设置z轴的值 Z = np.sin(np.sqrt(X**2,Y**2)) #2.把显示框放入 Axes3D()函数中 ax = Axes3D(plt.figure()) #3.画3D图. #前三个参数为xyz,rstride和cstride表示跨度(经过多少切换成下一个颜色,越小精细度越好) #cmap为z的值对应的颜色盘上的颜色,rainbow为一种颜色类型 ax.plot_surface(X,Y,Z,rstride=1,cstride=1,cmap='rainbow') #4.设置对应平面的颜色 #zdir='x',表示将3D图压到x=offset的平面上 ax.contourf(X,Y,Z,zdir='x',offset=-4,cmap='rainbow') plt.show()十一、subplot
import matplotlib.pyplot as plt plt.figure() plt.subplot(2,2,1) #figure当作两行两列,设置第1个 plt.plot([0,1],[0,1]) #x范围和y的范围 plt.subplot(2,2,2) #figure当作两行两列,设置第2个 plt.plot([0,2],[0,2]) #x范围和y的范围 plt.subplot(2,2,3) #figure当作两行两列,设置第3个 plt.plot([0,3],[0,3]) #x范围和y的范围 plt.subplot(2,2,4) #figure当作两行两列,设置第4个 plt.plot([0,4],[0,4]) #x范围和y的范围 plt.show()
import matplotlib.pyplot as plt plt.figure() plt.subplot(2,1,1) plt.plot([0,1],[0,1]) plt.subplot(2,3,4) plt.plot([0,2],[0,2]) plt.subplot(2,3,5) plt.plot([0,3],[0,3]) plt.subplot(2,3,6) plt.plot([0,4],[0,4]) plt.show()十二、图中图
import matplotlib.pyplot as plt
#1.设置基本参数
x=[1,2,3,4,5,6,7]
y=[1,2,5,3,9,8,4]
x_percent,y_percent,width,height = 0.1,0.1,0.8,0.8
#2.设置图一在显示框中x和y的占比(从最左开始计算)、宽度和高度
plt.axes([x_percent,y_percent,width,height])#默认下面语句设置图一
plt.plot(x,y,'r-')
plt.xlabel('x')
plt.ylabel('y')
plt.title('line 1')
#3.设置图二在显示框中x和y的占比(从最左开始计算)、宽度和高度
plt.axes([0.2,0.6,0.25,0.25])#默认下面语句设置图二
plt.plot(x,y,'b-')
plt.xlabel('xx')
plt.ylabel('yy')
plt.title('line 2')
plt.show()
十三、共享轴
import numpy as np
import matplotlib.pyplot as plt
#1.设置基本参数
x = np.arange(0,10,0.1) #范围[0,10),步长为0.1
y1 = 0.05*x**2
y2 = -1*y1
#2.共享x轴
fig,ax1 = plt.subplots()
ax2 = ax1.twinx()
#3.加以区分
#ax1表示y1,ax2表示y2
ax1.plot(x,y1,'g-') #绿色实线
ax1.plot(x,y2,'b--') #绿色虚线
ax1.set_xlabel('x data')
ax1.set_ylabel('y1',color='g')
ax2.set_ylabel('y2',color='b')
plt.show()
十四、Animation动画
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import animation
fig,ax = plt.subplots()
x = np.arange(0,2*np.pi,0.01)
y = np.sin(x)
line, = ax.plot(x,y)#line为一个列表,加逗号表示列表首个元素
def animate(i):
line.set_ydata(np.sin(x+i/10))
return line,
def init():
line.set_ydata(np.sin(x))
#frames表示帧数,interval表示频率
ani = animation.FuncAnimation(fig=fig,func=animate,frames=100,init_func=init,interval=20,blit=False)
plt.show()
结果为动图:



