Python:3D散射丢失色彩映射

时间:2013-08-14 17:26:37

标签: python 3d matplotlib scatter-plot

我正在创建一个包含多组数据的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)

这样可以正常工作,但只要保存或旋转绘图,第一个和第二个散点图上的颜色就会变为蓝色。

3D scatter loses color map info on all but the last data set.

强制更新的工作原理是保持颜色,但仅限于绘制的最后一个散点图。我尝试制作一个更新所有散点图的循环,但我得到与上面相同的结果:

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)

我知道如何确保所有散射都在更新,以便颜色不会消失吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

修改了你的代码以便它做任何事情:

>>> 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()

然后我得到: Result of save after rotate

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