如何防止图中的数字变为指数形式
- 2025-01-20 09:07:00
- admin 原创
- 82
问题描述:
我正在使用 Python 中的 Matplotlib 绘制简单的 xy 数据集。这会产生好看的图表,但当我使用图形视图(执行时出现plt.show()
)将绘制图表的各个部分“放大”得太近时,x 轴值会从标准数字形式(1050、1060、1070 等)变为带有指数符号的科学形式(例如 1、1.5、2.0,x 轴标签为+1.057e3
)。
我希望我的图形保留轴的简单编号,而不是使用指数形式。有没有办法可以强制 Matplotlib 这样做?
解决方案 1:
刻度标签的格式由一个对象控制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)
可以通过 rcparam 进行全局控制axes.formatter.useoffset
。
解决方案 2:
您可以使用更简单的命令来关闭它:
plt.ticklabel_format(useOffset=False)
解决方案 3:
您可以使用类似如下的方法:
from matplotlib.ticker import ScalarFormatter, FormatStrFormatter
ax.xaxis.set_major_formatter(FormatStrFormatter('%.0f'))
解决方案 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'
命令使用隐藏在答案注释中。
解决方案 5:
我在图表之前已经使用过下面的代码,并且它对我来说运行得很顺畅。
plt.ticklabel_format(style='plain')
解决方案 6:
确切地说,我不希望放大时显示科学数字,下面的方法也适用于我的情况。我在标记中使用纬度/经度,而科学形式没有意义。
plt.ticklabel_format(useOffset=False)
相关推荐
热门文章
项目管理软件有哪些?
热门标签
云禅道AD