Matplotlib 如何在坐标轴上显示小数和科学计数法

您所在的位置:网站首页 pycharm把输出的指数改成小数 Matplotlib 如何在坐标轴上显示小数和科学计数法

Matplotlib 如何在坐标轴上显示小数和科学计数法

2024-07-15 07:52| 来源: 网络整理| 查看: 265

Matplotlib 如何在坐标轴上显示小数和科学计数法

Matplotlib 是 Python 中最流行的数据可视化库之一,它提供了各种绘图选项和功能,允许用户创建各种类型的图表。在数据分析和科学研究中,精度和可读性是至关重要的。当数据很大或很小时,常规坐标轴可能无法直接表达精确值。本篇文章将介绍如何在 Matplotlib 坐标轴上显示小数和科学计数法。

阅读更多:Matplotlib 教程

1. 自动刻度

在绘制图表时,Matplotlib 会自动分配并格式化坐标轴刻度。这种情况下,刻度值和格式将基于所绘制的数据范围和所用的绘图函数。下面是一个简单的例子:

import matplotlib.pyplot as plt import numpy as np x = np.linspace(0, 10, num=100) y = np.sin(x) plt.plot(x, y) plt.show()

结果将绘制出一条正弦曲线。

在这个例子中,Matplotlib 自动为 x 轴和 y 轴分配了刻度值和标签。对于 x 轴,刻度值是 0 到 10,标签是 0、2、4、6、8 和 10。对于 y 轴,刻度值是 -1 到 1,标签是 -1、-0.5、0、0.5 和 1。Matplotlib 根据数据范围和所用的绘图函数(plot())选择了最佳刻度步长和格式。

2. 显示小数

有时,我们需要在坐标轴上显示小数。默认情况下,Matplotlib 会尝试使用最少的小数位数来显示浮点数。这是因为小数位过多可能会导致图像看起来过于拥挤。在下面的例子中,我们将观察一个例子,如何在双轴图上显示小数。

import matplotlib.pyplot as plt import numpy as np # 生成数据 x = np.linspace(0, 2 * np.pi, 1000) y1 = np.sin(x) y2 = np.sin(2 * x) # 创建图像和子图 fig, ax1 = plt.subplots() # 绘制第一个数据集 ax1.plot(x, y1, color='tab:blue') # 设置轴标签 ax1.set_xlabel('x') ax1.set_ylabel('sin(x)', color='tab:blue') # 添加第二个轴 ax2 = ax1.twinx() # 绘制第二个数据集 ax2.plot(x, y2, color='tab:red') # 设置轴标签 ax2.set_ylabel('sin(2x)', color='tab:red') plt.show()

这个例子将绘制两个正弦波,一个在蓝色轴上,一个在红色轴上。我们可以看到,坐标轴上的数字没有小数位数,但是 x 轴上许多标签过多,导致它们重叠。

为了减少标签的数量和拥挤,我们可以调整轴的刻度位置,并将小数点保留到所需的位数。例如,我们可以将刻度标签设置为:

ax1.xaxis.set_major_locator(plt.MultipleLocator(np.pi / 2)) ax1.xaxis.set_minor_locator(plt.MultipleLocator(np.pi / 4)) ax1.xaxis.set_major_formatter(plt.FuncFormatter(lambda val, pos: '{:.2f}'.format(val)))

这将使 x 轴的刻度值按 pi/2 的倍数增加,次要刻度增加 pi/4 的倍数。同时,使用 FuncFormatter() 可以在标签中保留两个小数位。

现在,x 轴上的标签变得更加具有可读性,并且更少,从而使图像更易读。

3. 显示科学计数法

另一种情况是,当数据很大或很小时,Matplotlib 会自动将坐标轴格式化为科学计数法。默认情况下,科学计数法小数点后显示 1 个数字。在某些情况下,我们可能需要显示更多小数位数来提高精度。在下面的例子中,我们将观察一个例子,如何显示更多的小数位数,以及如何禁用科学计数法。

import matplotlib.pyplot as plt import numpy as np # 生成数据 x = np.linspace(0, 10, 1000) y = np.power(10, x) plt.plot(x, y) # 获取 y 轴对象 ax = plt.gca() # 设置 y 轴标签 ax.set_ylabel('y') # 将 y 轴格式化为科学计数法并显示 2 个小数位 ax.yaxis.set_major_formatter(plt.FuncFormatter(lambda x, _: '{:.2e}'.format(x))) plt.show()

这个例子将绘制一个 y 轴随时间呈指数增长的图表。默认情况下,y 轴将格式化为科学计数法,小数点后跟随一个数字。对于这种情况,我们可以使用 FuncFormatter() 将 y 轴格式化为科学计数法,并显示两个小数位。

另外,如果我们想禁用科学计数法,我们可以使用以下代码:

# 禁用科学计数法 ax.ticklabel_format(style='plain')

这将将刻度格式化为普通的数字格式。

总结

在 Matplotlib 中,我们可以使用 Formatter 对象显式格式化坐标轴刻度,以显示小数位数或显示科学计数法。Matplotlib 还提供了 Locator 对象,以帮助在坐标轴上确定刻度位置。在下次使用 Matplotlib 制作数据可视化图表时,我们可以更轻松地控制坐标轴的外观和可读性。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3