如何防止在 Python matplotlib 图中将数字更改为指数形式
Posted
技术标签:
【中文标题】如何防止在 Python matplotlib 图中将数字更改为指数形式【英文标题】:How to prevent numbers being changed to exponential form in Python matplotlib figure 【发布时间】:2013-01-20 14:57:28 【问题描述】:我在 Python 中使用 Matplotlib 来绘制简单的 x-y 数据集。这会产生漂亮的图形,尽管当我使用图形视图(当您执行 plt.show()
时出现)“放大”过近绘制图形的各个部分时,x 轴值会从标准数字形式(1050 , 1060, 1070 等)转换为具有指数符号的科学形式(例如 1、1.5、2.0,x 轴标签为+1.057e3
)。
我希望我的数字保留轴的简单编号,而不是使用指数形式。有没有办法强制 Matplotlib 这样做?
【问题讨论】:
与***.com/questions/11855363/…重复 过时的答案。如需更新版本,请参阅此处:***.com/q/28371674/8881141 【参考方案1】:刻度标签的格式由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 全局控制。
【讨论】:
谢谢,这行得通。也为重复的问题道歉 - 我在发布之前进行了搜索,但我的搜索包括诸如“科学记数法”和“指数形式”之类的术语,而不是之前用户使用的“相对轴偏移”。 有没有办法永久强制这种改变?我从来没有找到科学记数法轴,最后总是把它们关掉。不过,我看不到 rcParam。 @IanRoberts 查看更新它是axes.formatter.useoffset
rcparam
太好了,谢谢!我个人更喜欢默认将此设置为 False,因为它似乎使许多人感到困惑而使少数人受益。
没错,好点。这是一个相当未经证实的说法,尽管我看到很多人问如何禁用它。无论如何,这个修复很好地解决了它,所以我现在可以忘记这个......干杯【参考方案2】:
你可以使用类似的东西:
from matplotlib.ticker import ScalarFormatter, FormatStrFormatter
ax.xaxis.set_major_formatter(FormatStrFormatter('%.0f'))
【讨论】:
这是在使用对数轴时唯一对我有用的解决方案。其他选项我尝试了所有引发的属性错误,例如AttributeError: 'LogFormatterSciNotation' object has no attribute 'set_scientific'
【参考方案3】:
您可以使用更简单的命令将其关闭:
plt.ticklabel_format(useOffset=False)
【讨论】:
例如,您可能需要使用axis='x'
指定轴,以防您得到关于 ScalarFormatters
的 AttributeError
。【参考方案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')
来源问答here。注意,axis 'y'
命令使用隐藏在答案 cmets 中。
【讨论】:
【参考方案5】:我在图表之前使用了下面的代码,它对我来说是无缝的..
plt.ticklabel_format(style='plain')
【讨论】:
【参考方案6】:确实,我不想在放大时显示科学数字,以下也适用于我的情况。我在科学形式没有意义的标签中使用纬度/经度。
plt.ticklabel_format(useOffset=False)
【讨论】:
以上是关于如何防止在 Python matplotlib 图中将数字更改为指数形式的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 matplotlib 在 python 中绘制 3D 密度图
如何在 matplotlib 中调整树状图的分支长度(如在 astrodendro 中)? [Python]