我在 Python 中使用 Matplotlib 来绘制简单的 xy 数据集。这会产生漂亮的图形,尽管当我使用图形视图(在您执行时出现)“放大”绘制图形的各个部分太近时plt.show()
,x 轴值会从标准数字形式(1050、1060、 1070 等)转换为具有指数符号的科学形式(例如 1、1.5、2.0,x 轴标签为+1.057e3
)。
我希望我的数字保留轴的简单编号,而不是使用指数形式。有没有办法可以强制 Matplotlib 这样做?
我在 Python 中使用 Matplotlib 来绘制简单的 xy 数据集。这会产生漂亮的图形,尽管当我使用图形视图(在您执行时出现)“放大”绘制图形的各个部分太近时plt.show()
,x 轴值会从标准数字形式(1050、1060、 1070 等)转换为具有指数符号的科学形式(例如 1、1.5、2.0,x 轴标签为+1.057e3
)。
我希望我的数字保留轴的简单编号,而不是使用指数形式。有没有办法可以强制 Matplotlib 这样做?
刻度标签的格式由一个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.useoffset
rcparam 全局控制它。
您可以使用更简单的命令将其关闭:
plt.ticklabel_format(useOffset=False)
你可以使用类似的东西:
from matplotlib.ticker import ScalarFormatter, FormatStrFormatter
ax.xaxis.set_major_formatter(FormatStrFormatter('%.0f'))
使用以下命令:
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'
命令使用隐藏在答案注释中。
我在图表之前使用了下面的代码,它对我来说是无缝的..
plt.ticklabel_format(style='plain')
确切地说,我不希望在放大时显示科学数字,以下也适用于我的情况。我在科学形式没有意义的标签中使用纬度/经度。
plt.ticklabel_format(useOffset=False)