如何在Python matplotlib图中防止数字被改为指数形式

时间:2013-02-05 16:01:19

标签: python graph matplotlib figure

我在Python中使用Matplotlib来绘制简单的x-y数据集。这会生成漂亮的图形,但是当我使用图形视图(在执行plt.show()时出现)在绘制图形的各个部分上“放大”太近时,x轴值从标准数字形式变化(1050,1060,1070等)具有指数表示法的科学形式(例如1,1.5,2.0,x轴标记为+1.057e3)。

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

6 个答案:

答案 0 :(得分:90)

刻度标签的格式由Formatter对象控制,假设您没有做任何奇特的事情将是ScalerFormatter by default。如果可见值的分数变化非常小,则此格式化程序将使用常量移位。为避免这种情况,请将其关闭:

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.useoffset rcparam。

全局控制

答案 1 :(得分:21)

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

plt.ticklabel_format(useOffset=False)

答案 2 :(得分:13)

您可以使用以下内容:

from matplotlib.ticker import ScalarFormatter, FormatStrFormatter

ax.xaxis.set_major_formatter(FormatStrFormatter('%.0f'))

答案 3 :(得分:1)

使用以下命令: final images = Provider.of<NewImage>(context, listen: false).imageList;

如果使用子图,则可能会遇到ax.ticklabel_format(useOffset=False, style='plain'),在这种情况下,您将像下面这样添加AttributeError: This method only works with the ScalarFormatter。您可以在出现问题的地方将“ y”更改为轴。

axis='y'

提供问题和答案here。请注意,ax1.ticklabel_format(useOffset=False, style='plain', axis='y') 命令的使用隐藏在答案注释中。

答案 4 :(得分:0)

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

plt.ticklabel_format(style='plain')

答案 5 :(得分:0)

我确实不想在放大时显示科学数字,以下内容也适用于我的情况。我在标注科学形式没有意义的地方使用纬度/经度。

plt.ticklabel_format(useOffset=False)