【问题标题】:Matplotlib integer ticks and axis multiplier to be a power of 10Matplotlib 整数刻度和轴乘数为 10 的幂
【发布时间】:2017-10-30 19:20:33
【问题描述】:

我想用 matplotlib.pyplot 绘图。对于 x 轴的刻度,我想得到整数乘以 10 的幂。但是,我得到的是整数乘以浮点数和 10 的幂,如下图所示。

使用以下命令停用此行为:

ax.get_xaxis().get_major_formatter().set_useOffset(False)

表示刻度标签将仅为整数。

例如,我希望数字 35000 为 35,轴上的乘数为 10^3 或 3.5,乘数为 10^4。不是 25,乘数是 1.4 * 10^3。


更新: 我用来生成绘图的代码:

fig = plt.figure(figsize=(5, 5), dpi=80)
ax = fig.add_subplot(111)

data = read_data(filename)

ax.hist(data, bins=50)

x_median = np.median(data)
x_std = np.std(data)
ax.set_xlim([x_median - 4*x_std, x_median + 4*x_std])

另外,另一个使用相同代码但没有相同问题的情节。

【问题讨论】:

  • 您能否提供用于生成绘图的代码、一些示例输入数据以及您正在使用的 matplotlib 版本?
  • 问题是这是不可重现的。使用一些随机数据时,绘图可能类似于○this。所以你真的需要提供一个minimal reproducible example的问题。
  • 对不起,我受到限制,无法提供任何数据。我的问题很简单:如何以与数据无关的方式处理 x 轴刻度?我不是在寻找一种定制的解决方案,它可以与一个特定的图表一起工作,而不能在其余的图表上工作。我现在拥有的不仅仅是一两个数字。我会请求许可,我也许可以分享一些数据。
  • 你误解了minimal reproducible example。我们不想要您的秘密数据。 minimal reproducible example 的目的完全是为了不必向某人提供实际代码或数据并仍然让他们重现问题。问题是这个问题是不可重现的。然而,为了找到一个好的解决方案,首先需要知道如何获得不良行为以查看导致它的原因,然后提出解决方案。所以通常的方法是在代码中硬编码一些数据,这样它就可以运行并重现问题。

标签: python matplotlib figure


【解决方案1】:

在我看来,它正在按预期工作。您的值不会相乘,而是偏移 1.007x10^5。一开始你说你想要整数乘以 10 的幂,但是你将如何以这种方式表示 10750?没有四舍五入的唯一方法是 1075*10^1。在您的示例中,它变得更加清晰,您允许将浮点数乘以 10 的幂。您只需要一种科学格式。最初是从 https://stackoverflow.com/a/6654046/15237183https://matplotlib.org/stable/api/ticker_api.html#matplotlib.ticker.ScalarFormatter 的一些阅读,我建议你尝试

from matplotlib.ticker import ScalarFormatter

y_formatter = ScalarFormatter(useOffset=False, useMathText=True)
ax.yaxis.set_major_formatter(y_formatter)

useOffset=False 将切换为科学记数法而不是偏移记数法。而 useMathText=True 将幂格式化为 x10 而不是 1e。

【讨论】:

    猜你喜欢
    • 2021-06-12
    • 1970-01-01
    • 2020-07-26
    • 2019-01-05
    • 1970-01-01
    • 1970-01-01
    • 2013-02-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多