【问题标题】:Matplotlib renders wrong ticks on the y axisMatplotlib 在 y 轴上呈现错误的刻度
【发布时间】:2021-04-14 13:53:17
【问题描述】:

我正在尝试使用matplotlib Python 包在 y 轴上呈现指定的刻度。出于某种原因,该库渲染的刻度比我给它渲染和使用科学记数法的刻度要多。对我来说,这似乎是库中的一个错误,我能够在更多设备上重现该问题。有解决办法吗?

重现问题的源代码:

import matplotlib.pyplot as plt
import matplotlib.ticker as mticker
plt.figure(figsize=(6,4))
plt.xlim(0, 1000)
plt.xlabel('x')
plt.yscale('log')
plt.ylim(20, 200)
plt.yticks([20, 28, 39, 54, 75, 110, 150, 200])
plt.gca().get_yaxis().set_major_formatter(mticker.ScalarFormatter(useOffset=False))
plt.gca().get_yaxis().set_tick_params(which='minor', width=0)
plt.ylabel('y')
plt.savefig('test.png')
plt.close()

渲染图:

编辑plt.yscale('log') 之后调用plt.gca().get_yaxis().clear() 似乎可以解决问题。

【问题讨论】:

  • 它们是小蜱虫。使用plt.minorticks_off()
  • 您是否尝试关闭次要刻度? set_minor_formatter(mticker.NullFormatter())
  • 它们不是小刻度,而是 plt.yscale('log') 调用之后的原始轴,在更改格式化程序之前。清除它解决了这个问题。

标签: python python-3.x matplotlib


【解决方案1】:

评论 plt.yscale('log') 出来,似乎从 y 轴删除科学记数法,同时保持所需的刻度值。

如果您仍然需要它,将plt.yscale('log') 放在plt.ylim()plt.yticks() 之后似乎可行:

import matplotlib.pyplot as plt
import matplotlib.ticker as mticker

plt.figure(figsize=(6,4))
plt.xlim(0, 1000)
plt.xlabel('x')
plt.ylim(20, 200)
plt.yticks([20, 28, 39, 54, 75, 110, 150, 200])
plt.yscale('log')
plt.gca().get_yaxis().set_major_formatter(mticker.ScalarFormatter(useOffset=False))
plt.gca().get_yaxis().set_tick_params(which='minor', width=0)
plt.ylabel('y')
plt.savefig('test.png')
plt.close()

为了将 100 替换为 10^2,我注释了第一行 plt.gca()

【讨论】:

  • 谢谢,您的建议给了我正确的方向。在plt.yscale('x') 之后调用plt.gca().get_yaxis().clear() 似乎可以解决问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-14
  • 1970-01-01
  • 2021-11-07
  • 2012-09-24
  • 2012-05-08
  • 1970-01-01
相关资源
最近更新 更多