文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Matplotlib如何控制坐标轴刻度间距与标签

2023-06-25 11:31

关注

这篇文章将为大家详细讲解有关Matplotlib如何控制坐标轴刻度间距与标签,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

控制刻度间距

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

import numpy as npimport matplotlib.pyplot as pltimport matplotlib.ticker as tickerx = 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()

Matplotlib如何控制坐标轴刻度间距与标签

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

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

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

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

import numpy as npimport matplotlib.pyplot as pltimport matplotlib.ticker as tickerx = 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()

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

控制刻度标签

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

import numpy as npimport matplotlib.ticker as tickerimport matplotlib.pyplot as pltname_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()

Matplotlib如何控制坐标轴刻度间距与标签

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

更简单的设置方式

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

import numpy as npimport matplotlib.pyplot as pltname_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()

Matplotlib如何控制坐标轴刻度间距与标签

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

高级刻度标签控制

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

import numpy as npimport matplotlib.pyplot as pltimport matplotlib.ticker as tickerdef make_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()

Matplotlib如何控制坐标轴刻度间距与标签

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

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

import numpy as npimport datetimeimport matplotlib.pyplot as pltimport matplotlib.ticker as tickerstart_date = datetime.datetime(1998, 1, 1)def make_label(value, pos):    time = start_date + datetime.timedelta(days = 365 * value)    return time.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()

Matplotlib如何控制坐标轴刻度间距与标签

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

关于“Matplotlib如何控制坐标轴刻度间距与标签”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯