Matplotlib的反转轴、绘制双轴和定制刻度详解

 更新时间:2023年08月18日 10:54:00   作者:天元浪子  
这篇文章主要介绍了Matplotlib的反转轴、绘制双轴和定制刻度详解,作为Python生态中应用最广泛的绘图库,Matplotlib用起来非常简单,也很容易上手,本文汇总了和轴、刻度相关的七个Matplotlib使用技巧,并给出了实例代码,需要的朋友可以参考下

Matplotlib

作为Python生态中应用最广泛的绘图库,Matplotlib用起来非常简单,也很容易上手。

不过有些细节想要做得尽善尽美,就需要仔细阅读它的文档了。

对于初学者来说,反转坐标轴、绘制双轴(将两个动态范围不同的数据绘制在一张图上,分别使用两个不同的坐标轴)有一定难度,改变坐标轴刻度的样式或内容,更是无从下手。

本文汇总了和轴、刻度相关的七个Matplotlib使用技巧,并给出了实例代码。

1 反转坐标轴

使用axes.invert_xaxis() 函数和axes.invert_yaxis() 函数可分别反转x轴和y轴。

这两个函数均不需要任何参数。下面的例子使用图像绘制函数 imshow() 来演示反转轴。

imshow() 函数通过origin参数实现y轴反转,这里将其固定为“lower”。

import numpy as np
from matplotlib import pyplot as plt
plt.rcParams['font.sans-serif'] = ['FangSong']
plt.rcParams['axes.unicode_minus'] = False
y, x = np.mgrid[-2:2:200j, -3:3:300j]
z = np.exp(-x**2-y**2) - np.exp(-(x-1)**2-(y-1)**2)
fig = plt.figure()
ax1 = fig.add_subplot(221)
ax2 = fig.add_subplot(222)
ax3 = fig.add_subplot(223)
ax4 = fig.add_subplot(224)
ax1.imshow(z, cmap='jet', origin='lower')
ax2.imshow(z, cmap='jet', origin='lower')
ax3.imshow(z, cmap='jet', origin='lower')
ax4.imshow(z, cmap='jet', origin='lower')
ax2.invert_xaxis()
ax3.invert_yaxis()
ax4.invert_xaxis()
ax4.invert_yaxis()
ax1.set_title("正常的X、Y轴")
ax2.set_title("反转X轴")
ax3.set_title("反转Y轴")
ax4.set_title("反转X、Y轴")
plt.show()

反转轴后的效果如下图 所示。

在这里插入图片描述

2 绘制双轴

Matplotlib支持在一个子图上显示两个x轴或两个y轴。

使用axes.twinx()函数可显示双x轴,使用 axes.twiny() 函数可显示双 y 轴。

以下代码演示了使用 axes.twiny() 函数显示双 y 轴。

import numpy as np
from matplotlib import pyplot as plt
plt.rcParams['font.sans-serif'] = ['FangSong']
plt.rcParams['axes.unicode_minus'] = False
x = np.linspace(-2*np.pi, 2*np.pi, 200)
y1 = np.square(x)
y2 = np.cos(x)
fig = plt.figure()
ax = fig.add_axes([0.1, 0.1, 0.8, 0.8])
ax_twinx = ax.twinx()
ax.plot(x, y1, c='r')
ax_twinx.plot(x, y2, c='g', ls='-.')
plt.show()

效果如下图所示。

在这里插入图片描述

3 设置坐标轴范围

使用axes.set_xlim(left, right) 和axes.set_ylim(bottom, top) 函数设置x 与y轴的显示范围。

函数参数分别是能够显示的最小值和最大值,如果最大值或最小值为 None,则表示只限制坐标轴一端的值域范围。

import numpy as np
from matplotlib import pyplot as plt
x = np.linspace(0, 2*np.pi, 100)
y = np.sin(x)
fig = plt.figure()
ax1 = fig.add_subplot(121)
ax1.plot(x, y, c='r')
ax1.set_ylim(-0.8, 0.8)
ax2 = fig.add_subplot(122)
ax2.plot(x, y, c='g')
ax2.set_xlim(-np.pi, 3*np.pi)
plt.show()

以上代码重新设置了子图坐标轴范围,效果如下图所示。左图缩小了 y 轴的范围,右图扩大了 x 轴的范围。

在这里插入图片描述

4 设置主副刻度

主副刻度常用于日期时间轴,如主刻度显示年份,副刻度显示月份。

非线性的对数轴往往也需要显示副刻度。

Matplotlib提供了4个函数来设置x轴和y轴的主副刻度。

  • ax.xaxis.set_major_locator(locator) :用于设置 x 轴主刻度。
  • ax.xaxis.set_minor_locator(locator) :用于设置 x 轴副刻度。
  • ax.yaxis.set_major_locator(locator) :用于设置 y 轴主刻度。
  • ax.yaxis.set_minor_locator(locator) :用于设置 y 轴副刻度。

函数的locator参数实例有两种,分别是来自ticker和dates两个子模块中有关刻度的子类实例。

下面的代码演示了在x轴上设置日期时间相关的主副刻度。

import numpy as np
from matplotlib import pyplot as plt
import matplotlib.dates as mdates
x = np.arange('2019-01', '2019-06', dtype='datetime64[D]')
y = np.random.rand(x.shape[0])
fig = plt.figure()
ax = fig.add_axes([0.1, 0.1, 0.8, 0.8])
ax.plot(x, y, c='g')
ax.xaxis.set_major_locator(mdates.MonthLocator())
ax.xaxis.set_major_formatter(mdates.DateFormatter('\n%Y-%m-%d'))
ax.xaxis.set_minor_locator(mdates.DayLocator(bymonthday=(1,11,21)))
ax.xaxis.set_minor_formatter(mdates.DateFormatter('%d'))
plt.show()

效果如下图所示。

在这里插入图片描述

5 设置刻度显示密度

Matplotlib的ticker子模块包含的Locator类是所有刻度类的基类,负责根据数据的范围自动调整视觉间隔以及刻度位置的选择。

MultipleLocator是Locator的派生类,能够控制刻度的疏密。

import numpy as np
from matplotlib import pyplot as plt
from matplotlib.ticker import MultipleLocator
plt.rcParams['font.sans-serif'] = ['FangSong']
plt.rcParams['axes.unicode_minus'] = False
x = np.linspace(0, 4*np.pi, 500)
fig = plt.figure()
ax1 = fig.add_subplot(121)
ax1.plot(x, np.sin(x), c='m')
ax1.yaxis.set_major_locator(MultipleLocator(0.3))
ax2 = fig.add_subplot(122)
ax2.plot(x, np.sin(x), c='m')
ax2.xaxis.set_major_locator(MultipleLocator(3))
ax2.xaxis.set_minor_locator(MultipleLocator(0.6))
ax1.set_title('X轴刻度自动调整,Y轴设置刻度间隔0.3')
ax2.set_title('X轴设置主刻度间隔3副刻度间隔0.6,Y轴刻度自动调整')
plt.show()

以上代码创建了两个子图,绘图结果如下图所示,左图演示了如何设置 y 轴的主刻度密度,右图演示了如何设置 x 轴主刻度和副刻度的密度。

在这里插入图片描述

6 设置刻度文本样式

设置刻度文本的颜色、字体、字号或旋转文本等样式,需要使用axes.get_xticklabels() 或axes.get_yticklabels() 函数获取x轴或y轴的文本对象列表。

文本对象中包含设置文本大小、颜色、旋转角度的函数,使用对应函数即可完成设置。

import numpy as np
from matplotlib import pyplot as plt
import matplotlib.dates as mdates
x = np.arange('2019-01', '2020-01', dtype='datetime64[D]')
y = np.random.rand(x.shape[0])
fig = plt.figure()
ax = fig.add_axes([0.1, 0.3, 0.8, 0.6])
ax.plot(x, y, c='g')
ax.xaxis.set_major_locator(mdates.MonthLocator())
ax.xaxis.set_major_formatter(mdates.DateFormatter('%Y/%m/%d'))
for lobj in ax.get_xticklabels():
    lobj.set_rotation(35)
    lobj.set_size(12)
    lobj.set_color('blue')
plt.show()

以上代码设置 x 轴的刻度文本字号大小为 12 号、颜色为蓝色,并将刻度文本逆时针旋转35°,效果如下图所示。

在这里插入图片描述

7 设置刻度文本内容

在有些应用场景中,需要将 x 轴或 x 轴刻度上的文字设置为更有标识意义的内容。

使用set_xticklabels( ) 和 set_yticklabels( ) 函数可以替换刻度文本,不过只适用于所有可能的取值都已经显示在坐标轴上的情况。

例如,x 轴对应的是列表[0,1,2,3],共4个取值,显示的刻度也是4个,此时可以使用 [’ 一季度 ‘,’ 二季度 ‘,’ 三季度 ‘,’ 四季度 '] 替换对应的数值。

Matplotlib 提供了强大的刻度文本格式化功能,ticker.Formatter 作为基类派生出了多种形式的格式化类,FuncFormatter就是其中之一。

使用FuncFormatter可以更加灵活地设置刻度文本内容。

import numpy as np
from matplotlib import pyplot as plt
from matplotlib.ticker import FuncFormatter
plt.rcParams['font.sans-serif'] = ['FangSong'] # 设置字体以便正确显示汉字
plt.rcParams['axes.unicode_minus'] = False # 正确显示连字符
x = np.linspace(0, 10, 200)
y = np.square(x)
def func_x(x, pos):
    return '%0.2f秒'%x
def func_y(y, pos):
    return '%0.2f°C'%y
formatter_x = FuncFormatter(func_x)
formatter_y = FuncFormatter(func_y)
fig = plt.figure()
ax = fig.add_axes([0.1, 0.1, 0.8, 0.8])
ax.plot(x, y, c='r')
ax.xaxis.set_major_formatter(formatter_x)
ax.yaxis.set_major_formatter(formatter_y)
plt.show()

以上代码将x轴和y轴的刻度文本格式化为百分之一的精度,并附带度量单位,绘图结果如下图所示。

在这里插入图片描述

到此这篇关于Matplotlib的反转轴、绘制双轴和定制刻度详解的文章就介绍到这了,更多相关Matplotlib的使用技巧内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python异常信息的不同展现方法总结

    Python异常信息的不同展现方法总结

    在日常开发的过程中,当代码报错时,我们通常要不断打印、阅读traceback提示信息,来调试代码,这篇文章介绍了如何实现一个Exception Hooks,使得traceback模块的提示信息更加精确;同时还介绍了一些第三方库,这些库也提供了Exception Hooks的功能
    2022-11-11
  • python生成密码字典的方法

    python生成密码字典的方法

    今天小编就为大家分享一篇python生成密码字典的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-07-07
  • python实现象棋游戏

    python实现象棋游戏

    这篇文章主要为大家详细介绍了python实现象棋游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-05-05
  • Django的models模型的具体使用

    Django的models模型的具体使用

    这篇文章主要介绍了Django的models模型的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-07-07
  • python爬虫selenium模块详解

    python爬虫selenium模块详解

    这篇文章主要介绍了python爬虫selenium模块详解,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-03-03
  • python多进程重复加载的解决方式

    python多进程重复加载的解决方式

    今天小编就为大家分享一篇python多进程重复加载的解决方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-12-12
  • Python数据分析之NumPy常用函数使用详解

    Python数据分析之NumPy常用函数使用详解

    本篇将介绍怎样从文件中载入数据,以及怎样使用NumPy的基本数学和统计分析函数、学习读写文件的方法,并尝试函数式编程和NumPy线性代数运算,来学习NumPy的常用函数,需要的可以参考一下
    2022-05-05
  • 如何解决Python读取图片路径存在转义字符的问题

    如何解决Python读取图片路径存在转义字符的问题

    这篇文章主要为大家详细介绍了如何解决Python读取图片路径时存在转义字符的问题,文中的示例代码讲解详细,感兴趣的小伙伴可以学习一下
    2023-07-07
  • Pytorch+PyG实现GraphConv过程示例详解

    Pytorch+PyG实现GraphConv过程示例详解

    这篇文章主要为大家介绍了Pytorch+PyG实现GraphConv过程示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-04-04
  • Python3实现将文件归档到zip文件及从zip文件中读取数据的方法

    Python3实现将文件归档到zip文件及从zip文件中读取数据的方法

    这篇文章主要介绍了Python3实现将文件归档到zip文件及从zip文件中读取数据的方法,涉及Python针对zip文件操作的相关技巧,需要的朋友可以参考下
    2015-05-05

最新评论