如何在 Matplotlib 中将轴刻度值乘以 10 的因数

Posted

技术标签:

【中文标题】如何在 Matplotlib 中将轴刻度值乘以 10 的因数【英文标题】:How to multiply axis tick values by factors of 10 in Matplotlib 【发布时间】:2021-06-12 06:04:47 【问题描述】:

我想将我的 y 轴刻度相乘(如下所示),以便它们显示从 2500 到 20000 的值范围,而不是 0.25 到 2。

我该怎么做?

【问题讨论】:

看看在matplotlib中改变y偏移。 y 轴上方的 '1e7' 是偏移量。 您当前的 y 轴实际上是 0.25*1e7 到 2.00*1e7。你是说你想让它显示 2500*1e3 到 20000*1e3? plt.plot(x,y/1000) @tdy 是的,这正是我想做的事情 这能回答你的问题吗? Set scientific notation with fixed exponent and significant digits for multiple subplots 【参考方案1】:

你可以使用这个order of magnitude formatter:

# https://***.com/a/42658124/13138364
import matplotlib.ticker

class OOMFormatter(matplotlib.ticker.ScalarFormatter):
    def __init__(self, order=0, fformat='%1.1f', offset=True, mathText=True):
        self.oom = order
        self.fformat = fformat
        matplotlib.ticker.ScalarFormatter.__init__(self,useOffset=offset,useMathText=mathText)
    def _set_order_of_magnitude(self):
        self.orderOfMagnitude = self.oom
    def _set_format(self, vmin=None, vmax=None):
        self.format = self.fformat
        if self._useMathText:
            self.format = r'$\mathdefault%s$' % self.format

1e7 更改为1e3 的玩具示例:

x = np.arange(100)
y = np.random.rand(100) * 2e7

# plot with `ax` handle
fig, ax = plt.subplots()
ax.plot(x, y)

# format order of magnitude of `ax.yaxis`
order = 3
ax.yaxis.set_major_formatter(OOMFormatter(order, '%1.1f'))

之前/之后:

【讨论】:

以上是关于如何在 Matplotlib 中将轴刻度值乘以 10 的因数的主要内容,如果未能解决你的问题,请参考以下文章

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

Matplotlib 库 : 绘图和可视化

matplotlib绘制图表时x或y轴刻度值乱序的问题

matplotlib绘制图表,设置刻度标签最大最小刻度字体大小,label位置刻度轴箭头等

Matplotlib基础使用

请教如何自定义python的matplotlib中的X轴刻度的问题