【问题标题】:Python: 3D scatter losing colormapPython:3D散点丢失颜色图
【发布时间】:2013-08-16 19:04:51
【问题描述】:

我正在创建一个包含多组数据的 3D 散点图,并为整个图形使用颜色图。代码如下所示:

import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

for R in [range(0,10), range(5,15), range(10,20)]:
  data = [np.array(R), np.array(range(10)), np.array(range(10))]
  AX = ax.scatter(*data, c=data[0], vmin=0, vmax=20, cmap=plt.cm.jet)
  def forceUpdate(event): AX.changed()
  fig.canvas.mpl_connect('draw_event', forceUpdate)

plt.colorbar(AX)

这很好用,但只要我保存它或旋转绘图,第一个和第二个散点上的颜色就会变成蓝色。

强制更新通过保留颜色但仅在最后绘制的散点图上起作用。我尝试制作一个更新所有散点图的循环,但得到的结果与上面相同:

AX = []
for R in [range(0,10), range(5,15), range(10,20)]:
  data = [np.array(R), np.array(range(10)), np.array(range(10))]
  AX.append(ax.scatter(*data, c=data[0], vmin=0, vmax=20, cmap=plt.cm.jet))
for i in AX:
  def forceUpdate(event): i.changed()
  fig.canvas.mpl_connect('draw_event', forceUpdate)

知道如何确保所有散点图都在更新,这样颜色就不会消失吗?

谢谢!

【问题讨论】:

标签: python 3d matplotlib scatter-plot


【解决方案1】:

修改了你的代码,让它可以做任何事情:

>>> import numpy as np
>>> import matplotlib.pyplot as plt
>>> from mpl_toolkits.mplot3d import Axes3D
>>> AX = \[\]
>>> fig = plt.figure()
>>> ax = fig.add_subplot(111, projection='3d')
>>> for R in \[range(0,10), range(5,15), range(10,20)\]:
...   data = \[np.array(R), np.array(range(10)), np.array(range(10))\]
...   AX = ax.scatter(*data, c=data\[0\], vmin=0, vmax=20, cmap=plt.cm.jet)
...   def forceUpdate(event): AX.changed()
...   fig.canvas.mpl_connect('draw_event', forceUpdate)
... 
9
10
11
>>> plt.colorbar(AX)
<matplotlib.colorbar.Colorbar instance at 0x36265a8>
>>> plt.show()

然后我得到:

所以上面的代码是有效的。如果您现有的代码不是,那么我建议您尝试上面的确切代码,如果这不起作用,请查看您正在使用的代码版本,如果它确实有效,那么您将不得不调查它与您的代码之间的差异实际代码,(而不是您的示例代码)。

【讨论】:

  • 你改变了什么?我所看到的只是您将plt.colorbar(AX) 放入循环中。所做的只是绘制三个颜色条,而不修复图形旋转或保存时散点变蓝的问题。
  • 当我开始使用您作为第一个示例发布的代码时,它无法运行有几个原因,a) 没有 import numpy as np 和 b) AX 不在 plt.colorbar(AX) 的范围内所以我将它移到范围内并得到 3。如果正如我所料,您在外部范围的示例中缺少 AX=[] 并且可能还有其他一些问题,您将遇到浅拷贝问题 - 即,当每个都被绘制时,它有一组映射但由于重绘时只有一个实际的 AX,因此它们最终是相同的。
  • 当然,当我将它复制到浏览器中时,这只是一个疏忽。当然,我有这些东西,因为我能够生成上面的情节。问题是当绘图旋转或保存时,点的颜色映射会消失。知道为什么会发生这种情况吗?
  • 您使用的 python、numpy、mathplotlib 和 mplot3d 的版本是:Python 2.7.4、numpy 1.7.1、mathplotlib 1.2.1 和 mplot3d 不确定但最近。
  • 我刚刚将 Matplotlib 更新到 1.2.1,它可以工作了!谢谢@SteveBarnes!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-05-14
  • 1970-01-01
  • 2023-03-08
  • 2011-07-26
  • 2016-12-30
  • 2020-08-13
  • 1970-01-01
相关资源
最近更新 更多