matplotlib 中所有绘图的线性刻度轴从公里到米

Posted

技术标签:

【中文标题】matplotlib 中所有绘图的线性刻度轴从公里到米【英文标题】:Linearly scale axes from kilometers to meters for all plots in matplotlib 【发布时间】:2022-01-22 19:01:23 【问题描述】:

我正在处理以米为单位的数据并想绘制位置。以米为单位的刻度模糊了绘图的可读性,所以我想以公里为单位绘制数据。我知道可以缩放所有数据d/1000.,但是,这会降低代码在我眼中的可读性,尤其是当您绘制许多不同的线时,每次都必须进行这种转换。

我正在寻找一种实现这种转换的通用方法,我可以想象在 matplotlib 中有一种很好的方法来实现这一点。

为您提供一些示例代码:

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(7500, 30000, 300)
y_ref = np.linspace(5000, 15000, 300)
y_noised = y_ref + np.random.normal(0, 250, size=y_ref.size)

fig = plt.Figure(figsize=(6,6))
ax = fig.add_subplot(1, 1, 1)

ax.plot(x, y_ref, c='r')
ax.scatter(x, y_noised, alpha=0.2)
fig

我想要下图,不需要xy_refy_noised分别按1000缩放。

有没有办法在 matplotlib 中执行这种转换,这样您只需为每个图形执行一次一次,无论您绘制多少行?

【问题讨论】:

【参考方案1】:

您可以使用这样的自定义刻度格式化程序(将函数传递到 set_major_formatter 会创建一个 FuncFormatter):

m2km = lambda x, _: f'x/1000:g'
ax.xaxis.set_major_formatter(m2km)
ax.yaxis.set_major_formatter(m2km)

【讨论】:

太棒了!这就是我一直在寻找的。仅供将来参考:此格式化程序不适用于具有大值的图中的“偏移表示法”。万一将来有人遇到这个问题,编写一个自己的格式化程序可能不会太难,它显式地设置大值的偏移量。但对我来说,它按原样工作!

以上是关于matplotlib 中所有绘图的线性刻度轴从公里到米的主要内容,如果未能解决你的问题,请参考以下文章

在 Matplotlib 中显示绘图之前获取空刻度标签

数据可视化包Matplotlib

如何使用标签和刻度区域透明而不是matplotlib中的主绘图区域保存绘图?

Matplotlib 库 : 绘图和可视化

matplotlib如何获取坐标轴刻度值?

Matplotlib基础使用