如何防止在 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 对象控制,假设您没有做任何花哨的事情,它将是ScalerFormatterby 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' 指定轴,以防您得到关于 ScalarFormattersAttributeError【参考方案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]

python - 如何在python中使用matplotlib为重叠图添加两个不同的标签?

python matplotlib模块 如何画两张图出来

Python之神奇的绘图库matplotlib

窗口大小更改导致我的条形图覆盖 - Matplotlib