0

複数のデータ セットを使用して 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)

これは問題なく動作しますが、保存するかプロットを回転するとすぐに、最初と 2 番目の散布図の色が青に変わります。

3D 散布図では、最後のデータ セット以外のすべてのカラー マップ情報が失われます。

強制更新は色を維持することで機能しますが、最後に描画された散布図でのみ機能します。すべての散布図を更新するループを作成しようとしましたが、上記と同じ結果が得られました。

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)

色が消えないように、すべての散布図が更新されていることを確認する方法はありますか?

ありがとう!

4

1 に答える 1

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

それから私は得る: 回転後の保存結果

したがって、上記のコードは機能しています。既存のコードがそうでない場合は、上記の正確なコードを試してみることをお勧めします。それが機能しない場合は、使用しているコードのバージョンを調べて、それとあなたのコードの違いを調査する必要があります(サンプルコードではなく)実際のコード。

于 2013-08-14T18:10:29.320 に答える