当前位置: 首页 > 科技观察

入门Matplotlib也可以很爽

时间:2023-03-16 11:00:55 科技观察

大家好。今天写一篇关于Matplotlib的入门教程。Matplotlib是一个广泛用于数据分析和机器学习的Python数据可视化库。1.第一张图Matplotlib支持面向对象和pyplot接口来画图。以这两种方法为例,画出如下图所示的函数图。y=x^2面向对象方式importmatplotlib.pyplotaspltimportnumpyasnpx=np.linspace(0,2,100)fig,ax=plt.subplots()ax.plot(x,x**2)#linechartax.set_xlabel('x')#设置横坐标名称ax.set_ylabel('y')#设置纵坐标标签ax.set_title("y=x^2")#设置标题plt.show()plt.subplots()函数返回fig和ax,分别是Figure对象和Axes对象。前者代表画布,后者代表画布上的绘图区域。显然,画布和绘图区之间是一对多的关系。之后,绘图的设置都是通过Axes对象完成的。pyplot方式importmatplotlib.pyplotaspltimportnumpyasnpx=np.linspace(0,2,100)plt.figure()plt.plot(x,x**2)plt.xlabel('x')plt.ylabel('y')plt.show()pyplot模式的绘图和设置都是通过plt完成的,没有对象的概念。虽然这两种方法都可以画图,但是官方推荐使用面向对象的方法。2、支持多种图形除了上面例子中看到的折线图,Matplotlib还支持以下图形:stackplot:stackedchartbar/barh:histogramhist:histogrampie:piechartscatter:scatterplotcontourf:contourfLinegraphboxplot:boxplotviolinplot:violinplot另外,Matplotlib还支持3D绘图3.常用设置在第一节的例子中,我们通过set_xlabel和set_title来设置坐标轴名称和标题。除此之外,还可以添加注释和图例。x=np.linspace(0,2,100)fig,ax=plt.subplots()ax.plot(x,x**2,label='二次函数')ax.set_xlabel('x')ax.set_ylabel('y')ax.set_title("y=x^2")#添加注释ax.annotate('坐标(1,1)',xy=(1,1),xytext=(0.5,1.5),arrowprops=dict(facecolor='black',shrink=0.05))#添加图例ax.legend()还可以设置坐标轴的格式ax.xaxis.set_major_formatter('x坐标{x}')如果有的话会很有用坐标轴为日期,可以将日期转换为周、月、季等格式。4.一个画布中的多个图形前面提到,一个画布可以有多个绘图区域。下面使用plt.subplots()函数创建2行2列4个绘图区。importmatplotlib.pyplotaspltimportnumpyasnpfig,axs=plt.subplots(ncols=2,nrows=2,figsize=(5.5,3.5),constrained_layout=True)#addanartist,inthiscaseanicelabelinthemiddle...forrowinrange(2):forcolinrange(2):axs[行,col].annotate(f'axs[{row},{col}]',(0.5,0.5),transform=axs[row,col].transAxes,ha='center',va='center',字体大小=18,color='darkgrey')fig.suptitle('plt.subplots()')也可以通过subplot_mosaic()函数创建无花果,axd=plt.subplot_mosaic([['upperleft','upperright'],['lowerleft','lowerright']],figsize=(5.5,3.5),constrained_layout=True)forkinaxd:annotate_axes(axd[k],f'axd["{k}"]',fontsize=14)图。suptitle('plt.subplot_mosaic()')通过subplot_mosaic()函数,也可以将其他几个绘图区合二为一。图,axd=plt.subplot_mosaic([['upperleft','right'],['lowerleft','right']],figsize=(5.5,3.5),constrained_layout=True)forkinaxd:annotate_axes(axd[k],f'axd["{k}"]',fontsize=14)fig.suptitle('plt.subplot_mosaic()')更复杂的绘图区域也可以通过GridSpec创建。fig=plt.figure(constrained_layout=True)gs0=fig.add_gridspec(1,2)gs00=gs0[0].subgridspec(2,2)gs01=gs0[1].subgridspec(3,1)forainrange(2):forbinrange(2):ax=fig.add_subplot(gs00[a,b])annotate_axes(ax,f'axLeft[{a},{b}]',fontsize=10)ifa==1andb==1:ax.set_xlabel('xlabel')forainrange(3):ax=fig.add_subplot(gs01[a])annotate_axes(ax,f'axRight[{a},{b}]')ifa==2:ax.set_ylabel('ylabel')fig.suptitle('nestedgridspecs')5.高级使用Matplotlib非常强大,设置非常灵活。比如折线图可以用极坐标画,玫瑰图稍加修改也可以画。折线图隐藏了坐标轴和边框,结合注释,可以画出时间轴。多个图表可以组合成更复杂的统计图表。Matpolitlib还支持图形动画和交互。今天的文章只介绍了Maptplotlib的一个非常基础的部分,它本身就非常的丰富和复杂。稍后我们将有机会介绍更深入的内容。如果本文对您有用,请点个赞,鼓励一下。