Matplotlib控制坐标轴刻度间距和标签

简介: 进行作图时需要对坐标轴进行标注,以满足学习或工作的要求,使统计图变得清晰简洁。借助Matplotlib库,可以方便的对进行数据分析,快速完成数据可视化。

控制刻度间距

目前为止,我们让 Matplotlib 自动处理刻度在坐标轴上的位置,但有时我们需要覆盖默认的坐标轴刻度配置,以便更加快速估计图形中点的坐标。

importnumpyasnpimportmatplotlib.pyplotaspltimportmatplotlib.tickerastickerx=np.linspace(-20, 20, 1024)
y=np.sinc(x)
ax=plt.axes()
ax.xaxis.set_major_locator(ticker.MultipleLocator(5))
ax.xaxis.set_minor_locator(ticker.MultipleLocator(1))
plt.plot(x, y, c='m')
plt.show()

绘图70.png

以上代码,强制水平刻度每隔 5 个单位步长呈现一次。此外,我们还添加了副刻度,副刻度的间隔为 1 个单位步长,步骤说明如下:

1. 首先实例化一个 Axes 对象——用于管理图形中的坐标轴:ax=plot.Axes()。

2. 然后使用 Locator 实例设置 x 轴 (ax.xaxis) 或 y 轴 (ax.yaxis) 的主刻度和副刻度。

也为副刻度添加辅助网格:

importnumpyasnpimportmatplotlib.pyplotaspltimportmatplotlib.tickerastickerx=np.linspace(-20, 20, 1024)
y=np.sinc(x)
ax=plt.axes()
ax.xaxis.set_major_locator(ticker.MultipleLocator(5))
ax.xaxis.set_minor_locator(ticker.MultipleLocator(1))
plt.grid(True, which='both', ls='dashed')
plt.plot(x, y, c='m')
plt.show()

绘图71.png

Tips:我们已经知道,可以使用 plt.grid() 添加辅助网格,但此函数还有一个可选参数 which,它具有三个可选值:"minor"、"major" 和 "both",分别用于仅显示副刻度、仅显示主刻度、主副刻度同时显示。

控制刻度标签

是时候介绍刻度标签的设置了,刻度标签是图形空间中的坐标,虽然数字刻度标签对于大多说场景来说是足够的,但是却并不总是能够满足需求。例如,我们需要显示 100 个公司的营收情况,这时候我们就需要横坐标刻度标签为公司名,而非数字;同样对于时间序列,我们希望横坐标刻度标签为日期。考虑到此类需求,我们需要使用 Matplotlib 为此提供了的 API 控制刻度标签。  

可以按以下步骤为任何 Matplotlib 图形设置刻度标签:

importnumpyasnpimportmatplotlib.tickerastickerimportmatplotlib.pyplotaspltname_list= ('Apple', 'Orange', 'Banana', 'Pear', 'Mango')
value_list=np.random.randint(0, 99, size=len(name_list))
pos_list=np.arange(len(name_list))
ax=plt.axes()
ax.xaxis.set_major_locator(ticker.FixedLocator((pos_list)))
ax.xaxis.set_major_formatter(ticker.FixedFormatter((name_list)))
plt.bar(pos_list, value_list, color='c', align='center')
plt.show()

绘图72.png

Tips:我们首先使用 ticker.Locator 实例来生成刻度的位置,然后使用 ticker.Formatter 实例将为刻度生成标签。FixedFormatter 从字符串列表中获取标签,然后用 Formatter 实例设置坐标轴。同时,我们还使用了 FixedLocator 来确保每个标签中心都正好与刻度中间对齐。

更简单的设置方式

虽然使用上述方法可以控制刻度标签,但可以看出此方法过于复杂,如果刻度标签是固定的字符列表,那么可以用以下简单的设置方法:

importnumpyasnpimportmatplotlib.pyplotaspltname_list= ('Apple', 'Orange', 'Banana', 'Pear', 'Mango')
value_list=np.random.randint(0, 99, size=len(name_list))
pos_list=np.arange(len(name_list))
plt.bar(pos_list, value_list, color='c', align='center')
plt.xticks(pos_list, name_list)
plt.show()

绘图73.png

Tips:使用 plt.xticks() 函数为一组固定的刻度提供固定标签,此函数接受位置列表和名称列表作为参数值,可以看出,此方法比第一种方法实现起来更简单。

高级刻度标签控制

不仅可以使用固定标签,使用 ticker API 可以使用函数生成的标签:

importnumpyasnpimportmatplotlib.pyplotaspltimportmatplotlib.tickerastickerdefmake_label(value, pos):
return'%0.1f%%'% (100.*value)
ax=plt.axes()
ax.xaxis.set_major_formatter(ticker.FuncFormatter(make_label))
x=np.linspace(0, 1, 256)
plt.plot(x, np.exp(-10*x), c='c')
plt.plot(x, np.exp(-5*x), c='c', ls='--')
plt.show()

绘图74.png

Tips:在此示例中,刻度标签是由自定义函数 make_label 生成的。此函数以刻度的坐标作为输入,并返回一个字符串作为坐标标签,这比给出固定的字符串列表更灵活。为了使用自定义函数,需要使用 FuncFormatter 实例——一个以函数为参数的格式化实例。

这种将生成标签的实际任务指派给其他函数的方法称为委托(delegation)模式,这是一种漂亮的编程技术。比方说,我们要将每个刻度显示为日期,这可以使用标准的 Python 时间和日期函数完成:  

importnumpyasnpimportdatetimeimportmatplotlib.pyplotaspltimportmatplotlib.tickerastickerstart_date=datetime.datetime(1998, 1, 1)
defmake_label(value, pos):
time=start_date+datetime.timedelta(days=365*value)
returntime.strftime('%b %y')
ax=plt.axes()
ax.xaxis.set_major_formatter(ticker.FuncFormatter(make_label))
x=np.linspace(0, 1, 256)
plt.plot(x, np.exp(-10*x), c='c')
plt.plot(x, np.exp(-5*x), c='c', ls='--')
labels=ax.get_xticklabels()
plt.setp(labels, rotation=30.)
plt.show()

绘图79.png

Tips:可以利用 ax.get_xticklabels() 获取刻度标签实例,然后对标签进行旋转,以避免长标签之间重叠,旋转使用 plt.setp() 函数,其接受刻度标签实例和旋转角度作为参数值。

相关文章
|
7月前
|
数据可视化 Python
python数据可视化 - matplotlib专题:带数据标签的双batch的Bar图绘制示例
python数据可视化 - matplotlib专题:带数据标签的双batch的Bar图绘制示例
77 0
|
Python
matplotlib 按指定的时间间隔生成坐标轴
matplotlib 提供了自定义生成时间轴的库,而当我们需要按照自己定义的时间间隔去生成时间轴时,时间轴并没有正常显示,只是按照一个时间跨度更大的方式显示,本文强制 matplotlib 严格按照要求自定义的时间间隔来坐标轴,并对每一行代码做了详细的说明。
7015 0
matplotlib 按指定的时间间隔生成坐标轴
【python】使用matplotlib绘图使刻度线向内
成功使用代码实现matplotlib绘制的图刻度线朝内
【python】使用matplotlib绘图使刻度线向内
|
5月前
|
Python
`matplotlib`是Python中一个非常流行的绘图库,它提供了丰富的绘图接口,包括二维和三维图形的绘制。`Axes3D`是`matplotlib`中用于创建三维坐标轴的对象,而`plot_surface`则是用于在三维空间中绘制表面的函数。
`matplotlib`是Python中一个非常流行的绘图库,它提供了丰富的绘图接口,包括二维和三维图形的绘制。`Axes3D`是`matplotlib`中用于创建三维坐标轴的对象,而`plot_surface`则是用于在三维空间中绘制表面的函数。
|
7月前
|
搜索推荐 数据可视化 Python
Matplotlib图表中的数据标签与图例设置
【4月更文挑战第17天】这篇文章介绍了如何在Python的Matplotlib库中设置数据标签和图例,以增强图表的可读性和解释性。主要内容包括:使用`text`函数添加基本和自定义数据标签,以及自动和手动创建图例。图例的位置和样式可通过`loc`和相关参数调整。文章强调了数据标签和图例结合使用的重要性,提供了一个综合示例来展示实践方法。良好的图表设计旨在清晰有效地传达信息。
|
数据挖掘 Python
如何使用Matplotlib模块的text()函数给柱形图添加美丽的标签数据?
如何使用Matplotlib模块的text()函数给柱形图添加美丽的标签数据?
89 4
|
关系型数据库 数据安全/隐私保护
python-matplotlib给图像添加文本标签与注释
python-matplotlib给图像添加文本标签与注释
1381 0
python-matplotlib给图像添加文本标签与注释
|
API Python
python matplotlib.axes相关属性设置(绘图方式、坐标轴、坐标刻度、文本等)
为什么要用 ax ,而不是 plt 呢? 因为在绘制子图过程中,对于每一个子图的不同设置,ax 可以直接实现对于单个子图的设定,因此掌握必要的 ax 设置命令尤为重要!
python matplotlib.axes相关属性设置(绘图方式、坐标轴、坐标刻度、文本等)
|
数据可视化 Python
Matplotlib数据可视化:文本与坐标轴
Matplotlib数据可视化:文本与坐标轴
Matplotlib数据可视化:文本与坐标轴
|
Python
python使用matplotlib制作条形图添加数据标签
在使用matplotlib展示数据的时候,当我们用到条形图的时候南面会遇到一些问题:
1264 0
python使用matplotlib制作条形图添加数据标签