【问题标题】:Plot issue while changing axes scales on matplotlib scatter plot在 matplotlib 散点图上更改轴比例时的绘图问题
【发布时间】:2013-12-18 05:59:43
【问题描述】:

我正在使用 matplotlib 绘制散点图。这是一个有点奇怪的问题。这是没有坐标轴比例时的数据图

plt.scatter(x, y , marker ='x')
#plt.xscale('log')
#plt.yscale('log')
plt.show()

坐标轴缩放为“对数”刻度的数据图。

为什么会这样?即使将基数更改为2e,也会发生同样的情况

【问题讨论】:

  • 虽然这可能确实不应该发生,但您的数据中似乎有 0 值。你可以先尝试删除那些,然后看看问题是否仍然存在?如果不是 0 或更低,我认为它们非常小,但不低于浮点精度?
  • @Evert - 我尝试从数据中删除 0 并绘制图表,但问题仍然存在。

标签: python-2.7 matplotlib scatter-plot


【解决方案1】:

在这种特殊情况下,您似乎无法在绘图之后缩放轴。你可以预先缩放它们,所以:

plt.xscale('log')
plt.yscale('log')
plt.scatter(x, y , marker ='x')
plt.show()

在这种特殊情况下(相同的标记),您也可以使用plt.plot 而不是plt.scatter,然后缩放后期绘图将起作用:

plt.plot(x, y, 'x')
plt.xscale('log')
plt.yscale('log')
plt.show()

我猜测为什么你不能缩放后散点图:散点图返回一个 PathCollection,这可能导致缩放函数只查看该集合的最后一个条目,即最后一个点。这当然只能在 1e5 - 1e6 范围内扩展。 plot() 返回一个Line2D,它将完整的情节考虑在内。

【讨论】:

  • 哇!谢谢 - 这工作。我不确定这是否应该是一个错误。
  • 是的,可以被视为一个错误(或者如果这两种方式都适用,至少对用户来说是一种方便)。或许可以在 mpl 邮件列表中询问?
  • 我会这样做的。非常感谢!
  • @Evert 如果是这种情况,限制缩放只查看PathCollection 的最后一点,那么散点图上的自动缩放将不起作用。
【解决方案2】:

日志缩放应该明智地裁剪值,因此数据中的0 不是问题。

我怀疑问题在于您的限制具有负值,因此天真地记录限制并使用这些会导致问题。

您也可以明确设置限制

ax = plt.gca()
ax.set_xlim([1e-5, 1e6])
ax.set_ylim([1e-5, 1e6])

并且不依赖于自动缩放。

【讨论】:

  • 不是真的,检查另一个答案。
  • @Dexter 我不明白你的评论。
  • 我没有检查您对 Evert 的评论 可能是,我错了。我会尽快写信给 MPL 邮件列表并找出原因。
  • @tcaswell 你是说 mpl 自动缩放线性数据,使轴有负限制,然后尝试记录这些限制?虽然合乎逻辑,但我仍然会将行为归档为错误。没错,PathCollection 与它无关。
猜你喜欢
  • 2022-07-14
  • 1970-01-01
  • 2013-12-31
  • 2013-06-29
  • 1970-01-01
  • 2016-04-28
  • 1970-01-01
  • 2014-09-18
相关资源
最近更新 更多