78

我在 Python 中使用 Matplotlib 来绘制简单的 xy 数据集。这会产生漂亮的图形,尽管当我使用图形视图(在您执行时出现)“放大”绘制图形的各个部分太近时plt.show(),x 轴值会从标准数字形式(1050、1060、 1070 等)转换为具有指数符号的科学形式(例如 1、1.5、2.0,x 轴标签为+1.057e3)。

我希望我的数字保留轴的简单编号,而不是使用指数形式。有没有办法可以强制 Matplotlib 这样做?

4

6 回答 6

100

刻度标签的格式由一个Formatter对象控制,假设您没有做任何花哨的事情ScalerFormatter,默认情况下将是一个. 如果可见值的部分变化非常小,则此格式化程序将使用常量移位。为避免这种情况,只需将其关闭:

plt.plot(arange(0,100,10) + 1000, arange(0,100,10))
ax = plt.gca()
ax.get_xaxis().get_major_formatter().set_useOffset(False)
plt.draw()

如果你想避免一般的科学记数法,

ax.get_xaxis().get_major_formatter().set_scientific(False)

可以通过axes.formatter.useoffsetrcparam 全局控制它。

于 2013-02-05T16:11:56.040 回答
33

您可以使用更简单的命令将其关闭:

plt.ticklabel_format(useOffset=False)
于 2017-05-05T12:15:07.643 回答
18

你可以使用类似的东西:

from matplotlib.ticker import ScalarFormatter, FormatStrFormatter

ax.xaxis.set_major_formatter(FormatStrFormatter('%.0f'))
于 2015-03-04T05:24:43.053 回答
4

使用以下命令: ax.ticklabel_format(useOffset=False, style='plain')

如果您使用的是子图,您可能会遇到类似下面AttributeError: This method only works with the ScalarFormatter添加的情况。axis='y'您可以将“y”更改为有问题的轴。

ax1.ticklabel_format(useOffset=False, style='plain', axis='y')

来源问题和答案在这里。请注意,axis 'y'命令使用隐藏在答案注释中。

于 2020-09-11T16:24:58.303 回答
2

我在图表之前使用了下面的代码,它对我来说是无缝的..

plt.ticklabel_format(style='plain')
于 2021-05-06T17:38:33.783 回答
0

确切地说,我不希望在放大时显示科学数字,以下也适用于我的情况。我在科学形式没有意义的标签中使用纬度/经度。

plt.ticklabel_format(useOffset=False)
于 2021-06-11T22:51:56.887 回答