我在Python中使用Matplotlib来绘制简单的x-y数据集。这会生成漂亮的图形,但是当我使用图形视图(在执行plt.show()
时出现)在绘制图形的各个部分上“放大”太近时,x轴值从标准数字形式变化(1050,1060,1070等)具有指数表示法的科学形式(例如1,1.5,2.0,x轴标记为+1.057e3
)。
我更喜欢我的数字保留轴的简单编号,而不是使用指数形式。有没有办法可以强迫Matplotlib这样做?
答案 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)