Matplotlib详解(plt 和ax分别是什么) | 您所在的位置:网站首页 › ax是什么品牌衣服 › Matplotlib详解(plt 和ax分别是什么) |
Matplotlib中的plt 和 ax 分别是什么?
概念引入两种绘图方式的区别subplot 绘制Matplotlib 常见组件设置整理4.1 设置显示中文字体4.2 设置标题4.3 边框的显示问题4.4 图例设置(legend)4.5 图形与边框之间的留白控制4.6 设置双坐标轴4.7 坐标轴相关设置4.7.1 设置x轴和y轴的范围4.7.2 设置横纵坐标轴的标签(名字)4.7.3 设置刻度和刻度标签
5 网格线的设置
刚接触Matplotlib时,会被书上的plt、ax以及subplots等各种概念所迷惑,心里存在无数个问号,这些究竟是啥?画出来的图不是一样的吗?他们有啥区别?下面就一步步来解答这些迷惑。 概念引入首先,我们应该要了解一张用Matplotlib画出来的图的具体构造,引用一张官方的图 如果将Matplotlib绘图和我们平常画画相类比,可以把Figure想象成一张纸(一般被称之为画布),Axes代表的则是纸中的一片区域(当然可以有多个区域,这是后续要说到的subplots),下面是一张更形象一点的图。 ** 对着两个概念有基本的了解后,就可以来看看plt.plot()和ax.plot()有何区别了,下面列出了两种用Matplotlib绘制图表的方式。 plt # 第一种方式 plt.figure() plt.plot([1,2,3,4,5],[2,4,6,8,10]) plt.show() ax # 第二种方式 fig,ax = plt.subplots() ax.plot([1,2,3],[4,5,6]) plt.show()绘图效果如下: 那区别在哪里? 从第一种方式的代码来看,先生成了一个Figure画布,然后在这个画布上隐式生成一个画图区域进行画图。 第二种方式同时生成了Figure和axes两个对象,然后用ax对象在其区域内进行绘图 如果从面向对象编程(对理解Matplotlib绘图很重要)的角度来看,显然第二种方式更加易于解释,生成的fig和ax分别对画布Figure和绘图区域Axes进行控制,第一种方式反而显得不是很直观,如果涉及到子图零部件的设置,用第一种绘图方式会很难受。 在实际绘图时,也更推荐使用第二种方式。 subplot 绘制下面通过介绍subplots加深对第二种绘图方式的理解 假如现在我要在一张纸上左边画一个折线图,右边画一个散点图,该如何画呢? 首先要有一个画布Figure,其次,需要有两个区域Axes(等价于两个子图subplot)来画图 # 生成画布和axes对象 # nrows=1和ncols=2分别代表1行和两列 fig,ax = plt.subplots(nrows=1,ncols=2)因为这里有两个画图区域,所以ax对应的是一个列表,存储了两个Axes 对象。 ax
个人认为用Matplotlib画出一张图来不难,难的是对于一些细节东西的设置,可能在一个小小的细节处理上就得百度好久,所以可以先点收藏了再看,需要的时候可以及时找出来看看。 先上一张官方绘制的关于各个组件在一张图中的名词解释,通过这张图可以很直观地感受到什么是legend,什么是tick……,遇到不会设置的也可以照着图搜索对应的文档,下面具体讲讲。 Matplotlib中默认将中文显示为乱码的◻,如下面这种情况: fig,ax = plt.subplots() ax.plot(['北京','上海','深圳'],[1,3,5]) plt.show()
函数: ax.set_title 利用fontdict 和 loc 参数可以分别对字体和标题位置进行设置 plt.rcParams['font.sans-serif'] = ['SimHei'] fig,ax = plt.subplots() ax.plot(['北京','上海','深圳'],[1,3,5]) ax.set_title('标题',fontdict={'size':16,'color':'red'},loc='center') plt.show()数:ax.spines[loc].set_visible(False) 一般的图表中,Matplotlib会默认显示出图形的spine, 就是图形上下左右的四条边线,如图 函数:ax.legend() 图例是对图形所展示的内容的解释,比如在一张图中画了三条线,那么这三条线都代表了什么呢?这时就需要做点注释。 要显示图例可以有两种方式: # 第一种: # plot的时候加上label,之后调用ax.legend() fig,ax = plt.subplots() ax.plot(['北京','上海','深圳'],[1,3,5],label='2010') ax.plot(['北京','上海','深圳'],[2,4,6],label='2020') ax.legend() plt.show() # 第二种: # 使用ax.legend()按顺序设置好图例 fig,ax = plt.subplots() ax.plot(['北京','上海','深圳'],[1,3,5]) ax.plot(['北京','上海','深圳'],[2,4,6]) # frameon = False 设置不显示图例的边框 ax.legend(['2010','2020'],loc='upper center',fontsize=10,labelcolor='red',frameon=False) plt.show()
函数:ax.margins() 不知道大家绘图的时候有没有发现,Matplotlib中默认在我们所画的图形和边框之间留有空白,比如 要去掉这样的空白部分可以使用ax.margins()进行设置 plt.rcParams['font.sans-serif'] = ['SimHei'] fig,ax = plt.subplots() ax.plot(['北京','上海','深圳'],[1,3,5]) ax.set_title('标题',fontdict={'size':16,'color':'red'},loc='center') ax.fill_between(['北京','上海','深圳'],[1,1,1],[1,3,5]) ax.margins(0) plt.show()函数:ax.twinx() 双坐标轴一般用于复合图表,同时表示两种图表的指标量纲不一,经典的使用场景如帕累托图。 使用中,需要对原有的ax使用.twinx()方法生成ax2,再利用ax2进行绘图 fig,ax = plt.subplots() ax.plot(['北京','上海','深圳'],[1,3,5],color='r') # 双坐标用法 ax2 = ax.twinx() ax2.bar(['北京','上海','深圳'],[20,40,60],alpha=0.3) plt.show()在一张二维图中,关于坐标轴各个零件的术语如图所示 set_xlim()、set_ylim() Matplotlib会自动得出沿x、y(和z轴,如果是3D图)轴显示的变量的最小值和最大值。然而,可以通过使用set_xlim()和set_ylim()函数明确地设置限制。实例如下: fig,ax = plt.subplots() ax.scatter([3,2,1],[1,3,5],color='r') ax.plot([3,2,1],[1,3,5],color='b')
函数:ax.grid() 网格线多用于辅助查看具体的数值大小,横纵坐标都可以设置相应的网格线,视具体情况而论。 fig,ax1 = plt.subplots() ax1.plot([1,2,3],[4,2,6],color='r') # visible参数设置是否显示网格 # axis参数设置在哪个轴上显示网格线,可选参数为'x','y','both' ax1.grid(visible=True,axis='y') |
CopyRight 2018-2019 实验室设备网 版权所有 |