【问题标题】:Why does matplotlib require setting log scale before plt.scatter() but not plt.plot()?为什么 matplotlib 需要在 plt.scatter() 之前设置日志比例而不是 plt.plot()?
【发布时间】:2016-12-12 12:22:52
【问题描述】:

我在helpful answer 中发现,当在 y 轴上使用对数刻度时,plt.scatter()plt.plot() 的行为不同。

使用plot,我可以在使用plt.show()之前随时更改为日志,但必须预先设置日志,使用分散方法之前。

这只是 matplotlib 中的历史和不可逆转的工件,还是属于“意外行为”类别?

import matplotlib.pyplot as plt

X = [0.997, 2.643, 0.354, 0.075, 1.0, 0.03, 2.39, 0.364, 0.221, 0.437]
Y = [15.487507, 2.320735, 0.085742, 0.303032, 1.0, 0.025435, 4.436435,
     0.025435, 0.000503, 2.320735]

plt.figure()

plt.subplot(2,2,1)
plt.scatter(X, Y)
plt.xscale('log')
plt.yscale('log')
plt.title('scatter - scale last')   

plt.subplot(2,2,2)
plt.plot(X, Y)
plt.xscale('log')
plt.yscale('log')
plt.title('plot - scale last')   

plt.subplot(2,2,3)
plt.xscale('log')
plt.yscale('log')
plt.scatter(X, Y)
plt.title('scatter - scale first')   


plt.subplot(2,2,4)
plt.xscale('log')
plt.yscale('log')
plt.plot(X, Y)
plt.title('plot - scale first')   


plt.show()

【问题讨论】:

  • @Kartik 有很多人非常熟悉 matplotlib,他们所做的不仅仅是在这里磕磕绊绊。我在这里问这个问题是因为我有一种预感,一个精通 matplotlib 的人会帮助我了解是否有可能改变 scatter 方法,或者它是否是那些不会发生的事情之一。也许我也没有注意到这种差异实际上有好处!
  • 我建议您也可以在 matplotlib git hub 上打开一个关于此的问题。也许它会作为一个预期的功能被击落,或者它可能会导致更新。
  • @uhoh 我不知道你为什么认为这是一个废话。我只是指出差异似乎是由于 ylimits 的选择方式。如果您致电plt.gca().relim(),您仍然会得到不正确的 y 轴范围。基于this answer,其中一位开发人员在创建后调用xscaleyscale 应该不是问题,所以我猜这是一个错误。
  • @Kartik 我已经冒险了 - Github 中的 matplotlib 问题 #6915。
  • 请让这些 cmets 线程少受热。

标签: python python-2.7 matplotlib


【解决方案1】:

这在某种程度上与matplotlib 计算的显示区域(轴限制)有关。

此行为已通过使用 set_xlimset_ylim 方法手动编辑坐标区范围得到修复。

plt.figure()
plt.scatter(X, Y)
plt.yscale('log')
plt.xscale('log')
axes = plt.gca()
axes.set_xlim([min(X),max(X)])
axes.set_ylim([min(Y),max(Y)])
plt.show()

但是,我还没有弄清楚这种行为的确切原因。欢迎提出建议。

编辑

如 cmets 部分所述,显然 Matplotlib 已在其官方 Github 存储库中将 Autoscaling has fundamental problems 确定为 发布关键问题,这将在即将发布的版本中修复。谢谢。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2021-03-21
  • 2023-03-03
  • 2020-08-07
  • 2012-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-04
相关资源
最近更新 更多