在使用Matplotlib绘图时,刻度设置在刚接触时比较令人头疼的,因为很多教程既使用了plt.xxxx
,又使用了ax.xxxx
,为了对刻度设置进行统一,本文将使用面向对象的方法:ax.xxxx
进行刻度调整讲解。所以在使用本文档之前,你必须先阅读我之前写的区别文章
首先我们使用plt.figure()
新建一个对象,并使用ax = plt.gca()
获取当前绘图区域
plt.figure(figsize = (7,6),dpi = 100)
ax = plt.gca()
plt.show()
![002486e6135245b3341d97b3da8ff542.png](https://i-blog.csdnimg.cn/blog_migrate/910570699048304386ad9df2ca4a0832.jpeg)
坐标轴范围
调整坐标轴范围可以使用ax.set_xlim()或者ax.set_ylim(),比如将x和y轴范围都设置在0-5
ax.set_xlim(0,5)
ax.set_ylim(0,5)
![0435a305292001353c2f1ef4a91fe970.png](https://i-blog.csdnimg.cn/blog_migrate/bb9f70d66a382e5d0416177276eb091e.jpeg)
坐标轴标签
给坐标轴添加文字使用ax.set_xlabel()
和ax.set_ylabel()
,其实在之前我们就说过,只要涉及到文字,本质上都一样,接收的参数也基本一致,比如标题、图例、注释等,所以在这里本文不详细讲解,不懂的话可以回去翻之前几篇文章,我们仅做一个示例
ax.set_xlabel("我是X轴",fontsize = 14,color = 'b',alpha = 0.7,bbox=dict(boxstyle='round,pad=0.5', fc='yellow', ec='blue',lw=1 ,alpha=0.7))
ax.set_ylabel("我是Y轴",fontsize = 14,color = 'b',alpha = 0.7,bbox=dict(boxstyle='round,pad=0.5', fc='yellow', ec='blue',lw=1 ,alpha=0.7))
![c38928f8678d0850e050eeb3b6ba8fed.png](https://i-blog.csdnimg.cn/blog_migrate/f3bc8175afb0e336a18bcaae94b46497.jpeg)
刻度文字
如果需要修改默认的刻度文字,可以使用ax.set_xticklabels()即可(y轴类似),接收一组list,里面是每个刻度上的文字,注意长度对齐,不过既然涉及到文字,类似修改标题、注释相关的文字样式调整也是支持的,此处不赘述,给一个例子
ax.set_xticklabels(['A','B','C','D','E','F','G'])
ax.set_yticklabels(['鉴','图','化','视','可','注','关'],family = 'SimHei',fontsize = 14)
![99fb1e7a2a88a525b3986f1317ab60ff.png](https://i-blog.csdnimg.cn/blog_migrate/8e0c4123cd0da1aec002152637dcf142.jpeg)
坐标轴刻度
刻度设置是比较头疼的,在讲解刻度设置之前,我们需要先了解主副刻度
如图所示,相信很好理解,0,1,2,3,4就是主刻度,中间的小刻度就是副刻度。所以修改刻度就是对主副刻度进行调整。
在Matplotlib中,默认的刻度是由locator类控制,其中子类MultipleLocator
和FormatStrFormatter
可以人为修改,他俩字面意思不难理解一个负责位置,一个负责样式。我们来看一个例子,首先导入
from matplotlib.ticker import MultipleLocator, FormatStrFormatter
下面我们认为调整坐标轴刻度间隔,老规矩,直接上代码,使用MultipleLocator进行初始化
xmajorLocator = MultipleLocator(1)
ax.xaxis.set_major_locator(xmajorLocator)
ymajorLocator = MultipleLocator(1)
ax.yaxis.set_major_locator(ymajorLocator)
xminorLocator = MultipleLocator(0.25)
ax.xaxis.set_minor_locator(xminorLocator)
yminorLocator = MultipleLocator(0.25)
ax.yaxis.set_minor_locator(yminorLocator)
解释一下,MultipleLocator(1)代表刻度之间间隔1,MultipleLocator(0.25)代表刻度之间间隔0.5,接着手动设置xy轴的主副刻度间隔,使用ax.xaxis.set_major_locator(xmajorLocator)
重写默认的locator,就是将x轴的主刻度按照刚刚的初始化设置进行调整,其他以此类推,此时效果为可以看到,主刻度间隔为1,副刻度间隔0.25,但是副刻度没有数值标注,这是可以使用FormatStrFormatter类进行修改
xminorFormatter = FormatStrFormatter('%0.2f')
ax.xaxis.set_minor_formatter(xminorFormatter)
在上面第一行代码,我们将初始化了一个保留2为小数的坐标轴间隔,并在第二行对x轴的副刻度进行修改,此时效果如下
最后为了突出主副刻度,我们可以使用tick_params对刻度线进行调整,让我们将主刻度线延长
tick_params(which='major',length=8,labelsize=10)
tick_params(which='minor',length=4)
使用起来很简单,用which指定刻度轴,length控制长度,labelsize控制大小即可!
现在,我们就制作出一个想要的刻度,其实官方文档中对于刻度线的设置,尤其是MultipleLocator
和FormatStrFormatter
类的使用,讲的比较复杂,但是从刚刚的使用过程发现,调整刻度并不是很难!
因为我们在修改刻度时,关注的大多就是间隔、标注、长度,所以如果你需要修改刻度,可以直接复制我的代码,根据需求调整出你想要的效果!
有关坐标轴及刻度的讲解就到这里,相信已经覆盖了大多数场景下的需求,而有些特殊的坐标轴及刻度设置,我会在后续单独讲解,有任何问题可以给我留言,谢谢!
-END-