matplotlib:在刻度标签中使用带科学记数法的固定小数位数

时间:2018-03-18 18:09:30

标签: python matplotlib

在这个小例子中考虑y刻度:

import matplotlib.pyplot as plt

plt.plot([200,400,600,800])
plt.ticklabel_format(axis='y',style='sci',scilimits=(0,0))
plt.show()

结果情节:tack.imgur.com/Gnl6F.png

我希望y刻度标签有一个十进制的固定格式,即1.0而不是1,等等。我怎么能这样做,同时保持科学记数法的指数情节的顶部?

到目前为止我找到的所有解决方案(大多数使用FormatStrFormatter代替ScalarFormatter)都会在所有刻度标签上重复指数,例如1.0e22.0e2等等,这不是我想要的。

提前谢谢你。

1 个答案:

答案 0 :(得分:1)

我刚刚找到了解决方案。在这里:

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

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

fig = plt.figure(1)
ax = fig.add_subplot(111)
ax.plot([200,400,600,800])

yfmt = ScalarFormatterForceFormat()
yfmt.set_powerlimits((0,0))
ax.yaxis.set_major_formatter(yfmt)            

plt.show()

它基于this answer在另一个主题上。