matplotlib库绘图基础
matplotlib库画图基础
文章目录
- matplotlib库画图基础
- 1.matplotlib简介
- 2.绘图操作
- 2.1导入画图库
- 2.2画第一个图
- 2.3创建figure
- 2.4控制线条风格
- 2.5坐标轴控制
- 2.6绘制坐标轴
- 2.7绘制标注
- 2.8绘制散点图
- 2.9绘制条形图
- 2.10绘制等高图
- 2.11绘制三维图
- 2.12在figure中绘制多个子图
1.matplotlib简介
Matplotlib 是一个非常强大的 Python 画图工具,如果用过MATLAB的话,学这个学起来十分简单,因为Matplotlib的画图跟MATLAB里面的函数差不多。
2.绘图操作
2.1导入画图库
import matplotlib.pyplot as plt import numpy as np2.2画第一个图
以下操作都在jupyter notebook中画制,如果是在pycharm等其他编译器,会弹出figure组件,供用户调整画像。
x = np.linspace(-1,1,50) y1 = 2*x + 1 y2 = x**2 #画图使用plot plt.plot(x,y1,x,y2) plt.show()基础知识点:每个画图都会使用一个figure,figure可以认为是一个画板,如果不特别声明,所以画图和曲线将在一个默认figure中展示
2.3创建figure
在jupyter notebook中画制是没有figure组件弹出的,所以所有的绘图都会输出到notebook中
x = np.linspace(-1,1,50) y1 = 2*x + 1 y2 = x**2#figure1(独立的画板) plt.figure(1) plt.plot(x,y1)#figure2(独立的画板) plt.figure(2) plt.plot(x,y1) plt.plot(x,y2) plt.show()因为在jupyter notebook上画的图,直接显示在页面上,无法看到figure组件。用pycharm就没事了。
2.4控制线条风格
可以通过color控制线条颜色,linewidth控制线条宽度,linestyle控制线条风格
x = np.linspace(-1,1,50) y1 = 2*x + 1 y2 = x**2#figure1 plt.figure(1) plt.plot(x,y1)#figure2 plt.figure(2) plt.plot(x,y1,color='r',linewidth=1.5,linestyle='dotted') plt.plot(x,y2,color='g',linewidth=1.5,linestyle='--') plt.show()2.5坐标轴控制
对画图的x,y轴的坐标进行控制可以通过xlim和xlabel,ylim和ylabel进行控制
x = np.linspace(-1,1,50) y1 = 2*x + 1 y2 = x**2plt.plot(x,y1,color='r',linewidth=1.5,linestyle='dotted') plt.plot(x,y2,color='g',linewidth=1.5,linestyle='--') #控制X坐标显示范围 plt.xlim((-2,2)) #给X和Y轴起轴标签名 plt.xlabel('Xlabel') plt.ylabel('Ylabel') #控制X轴的度标,ticks标度位置,labels标度名 plt.xticks(np.linspace(-2,2,4)) plt.yticks(ticks=[-0.5,1,2.5],labels=['bad','good','very good'])#曲线对照框 plt.legend(('label1', 'label2')) plt.show()2.6绘制坐标轴
将坐标轴移动到画图中心。
x = np.linspace(-1,1,50) y1 = 2*x + 1 y2 = x**2plt.plot(x,y1,color='r',linewidth=1.5,linestyle='dotted') plt.plot(x,y2,color='g',linewidth=1.5,linestyle='--') plt.xlim((-2,2)) plt.xlabel('X') plt.ylabel('Y') plt.xticks(np.linspace(-2,2,4)) plt.yticks(ticks=[-0.5,1,2.5],labels=['bad','good','very good'])ax = plt.gca() # get current axis 获得坐标轴对象 ax.spines['right'].set_color('none') # 将右边 边沿线颜色设置为空 其实就相当于抹掉这条边 ax.spines['top'].set_color('none') ax.xaxis.set_ticks_position('bottom') ax.yaxis.set_ticks_position('left') # 设置中心的为(0,0)的坐标轴 ax.spines['bottom'].set_position(('data', 0)) # 指定 data 设置的bottom(也就是指定的x轴)绑定到y轴的0这个点上 ax.spines['left'].set_position(('data', 0))plt.show()2.7绘制标注
主要是在画图中标注信息,起主要使用函数annotate()来实现
x = np.linspace(-1,1,50) y = 2*x + 1 x0 = 0.5 y0=2*x0+1 plt.scatter(x0,y0) plt.plot([x0,x0],[y0,-1],'--',lw=2.5) plt.plot(x,y) #xy控制箭头的点,xytext控制标签的位置,arrowprops用来设置箭头的风格 #r'$2x+1=%s$'%y0 是要打印的文本内容,这里r代表字符串中字符不转义(不好说明,如果看不懂直接写自己要打印的内容即可) plt.annotate(r'$2x+1=%s$'%y0,xy=(x0,y0),xytext=(0.6,1.5),arrowprops=dict(arrowstyle='->',connectionstyle='arc3,rad=.2')) plt.show()2.8绘制散点图
绘制散点图使用函数scatter,该函数主要用作绘制散点图
x = np.linspace(-1,1,50) y = 2*x + 1 r = np.random.normal(0,0.3,50) y1= y+rplt.scatter(x,y1,color='b',linewidths=1) plt.plot(x,y,color='r',linewidth=2.5)plt.show()2.9绘制条形图
x = np.linspace(0,5,6) y = 2*x + 10 r = np.random.normal(0,2,6) y1= y+r #画柱状图 plt.bar(x,y1,edgecolor='white') plt.bar(x,-y,color='orange',edgecolor='white') #标注值 for X,Y in zip(x,y1):plt.text(X,Y+0.1,'%.2f'%Y,ha='center',va='bottom') for X,Y in zip(x,y):plt.text(X,-Y-2.2,'%.2f'%Y,ha='center',va='bottom')plt.show()2.10绘制等高图
# 计算x,y坐标对应的高度值 def f(x, y):return (1-x/2+x**5+y**3) * np.exp(-x**2-y**2)# 生成x,y的数据 n = 256 x = np.linspace(-3, 3, n) y = np.linspace(-3, 3, n)# 把x,y数据生成mesh网格状的数据 #等高线的显示是在网格的基础上添加上高度值 X, Y = np.meshgrid(x, y)# 填充等高图 Cs=plt.contourf(X, Y, f(X, Y),8,alpha=0.7,cmap=plt.cm.hot) #等高线 C=plt.contour(X, Y, f(X, Y),8,colors='black') #增加标签 plt.clabel(C,inline=True,fontsize=8) #设置颜色条 plt.colorbar(Cs)# 显示图表 plt.show()2.11绘制三维图
画三维图,需要使用Axes3D模块,所有要先进行导入:
from mpl_toolkits.mplot3d import Axes3D构建三维坐标:
figure = plt.figure() ax = Axes3D(figure)#也可以这样 fig = plt.figure() ax = fig.gca(projection='3d')绘制:
# X, Y 的值 X = np.arange(-4, 4, 0.25) Y = np.arange(-4, 4, 0.25) # x,y 平面的网格,其实就是对X,Y进行广播操作 X, Y = np.meshgrid(X, Y) R = np.sqrt(X ** 2 + Y ** 2) # Z 的值 Z = np.sin(R) # rstride:网格之间的行跨度 # cstride:网格之间的列跨度 ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=plt.get_cmap('rainbow')) # zdir : 等高线图('z' | 'x' | 'y') # offset : 表示等高线图投射到指定页面的某个刻度 ax.contourf(X,Y,Z,zdir='z',offset=-2)p # z轴的显示范围 ax.set_zlim(-2,2) plt.show()这里的刻度没负号是因为在jupyter里面画的图,matplotlib对jupyter notebook多少有点不兼容。
在jupyter notebook中因为没办弹出figure组件,输出的结果直接是显示在网页中的。这导致一些显示会出问题。在pycharm编译器基本不会出现这种显示的错误。
2.12在figure中绘制多个子图
使用subplot,在一个figure中绘制多个图
fig=plt.figure() plt.subplot(2,2,1) #绘制图1plt.subplot(2,2,2) #绘制图2plt.subplot(2,2,3) #绘制图3plt.subplot(2,2,4) #绘制图4总结
以上是生活随笔为你收集整理的matplotlib库绘图基础的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: pandas loc和iloc区别
- 下一篇: ES6的导入和导出模块