在 Matplotlib 中以科学记数法显示第一个小数位

Mag*_*are 5 python matplotlib

我目前正在使用 y 轴的科学记数法生成不同的数字,导致某些图上的刻度为 2 或 6,而另一些图上的刻度为 2.5 或 8.9。我希望 y 轴上始终保留一位小数的刻度,即使它添加了零。这是一个例子

import matplotlib.pyplot as plt
import numpy as np

plt.plot(np.arange(1, 10), np.arange(1, 10)**5)
ax = plt.gca()
plt.ticklabel_format(axis='y', style='sci')
ax.yaxis.major.formatter.set_powerlimits((0,0))
plt.show()
Run Code Online (Sandbox Code Playgroud)

生成的图

我可以添加什么来强制在 y 轴上绘制刻度 1.0、2.0 等?

J. *_*sen 5

目前不ScalarFormatter支持刻度的自定义格式,例如设置小数位数。但是,您可以扩展该类,以便强制它使用您指定的格式。这是一个例子:

import matplotlib.pyplot as plt
import numpy as np
from matplotlib.ticker import ScalarFormatter

class ScalarFormatterForceFormat(ScalarFormatter):
    def _set_format(self):  # Override function that finds format to use.
        self.format = "%1.1f"  # Give format here

plt.plot(np.arange(1, 10), np.arange(1, 10)**5)
ax = plt.gca()
yfmt = ScalarFormatterForceFormat()
yfmt.set_powerlimits((0,0))
gca().yaxis.set_major_formatter(yfmt)
plt.show()
Run Code Online (Sandbox Code Playgroud)

这是它的外观。

在此输入图像描述

  • 我实际上需要重载 _set_format(self, vmin, vmax)。也许是 Matplotlib 2?但我设法让它为我工作。谢谢! (4认同)