matplotlibで3D散布図を作成するためのインターフェイスを作成していますが、Pythonスクリプトからデータにアクセスしたいと思います。2D散布図の場合、プロセスは次のようになります。
import numpy as np
from matplotlib import pyplot as plt
fig = plt.figure()
ax = fig.add_subplot(111)
h = ax.scatter(x,y,c=c,s=15,vmin=0,vmax=1,cmap='hot')
data = h.get_offsets()
上記のコードを使用すると、データは(N,2)
自分の(x,y)
データが入力されたnumpy配列になることがわかります。3Dデータに対して同じ操作を実行しようとすると:
import numpy as np
from matplotlib import pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
fig = plt.figure()
ax = Axes3D(fig)
h = ax.scatter(x,y,z,c=c,s=15,cmap='hot',vmin=0,vmax=1)
data = h.get_offsets()
結果のdata
変数は、(N,2)
numpy配列ではなく(N,3)
numpy配列のままです。の内容はdata
、私の入力データのいずれとも一致しなくなりました。私はそれを想定しdata
、私の3Dデータの2D投影が移入され、私は実際にアクセスするように3Dデータは、散布図を生成するために使用されるでしょう。これは可能ですか?
実際、を介しget_offsets
て取得された座標は、投影された座標です。元の座標は、3次元軸でmpl_toolkits.mplot3d.art3d.Path3DCollection
返される内部に隠されていscatter
ます。._offsets3d
属性から元の座標を取得します。(これは「プライベート」属性ですが、残念ながら、この情報を取得する唯一の方法です。)
import numpy as np
from matplotlib import pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
fig = plt.figure()
ax = Axes3D(fig)
x = [1,2,3,4]
y = [1,3,3,5]
z = [10,20,30,40]
c= [1,2,3,1]
scatter = ax.scatter(x,y,z,c=c,s=15,cmap='hot',vmin=0,vmax=1)
data = np.array(scatter._offsets3d).T
print(scatter) # prints mpl_toolkits.mplot3d.art3d.Path3DCollection
print(data)
# prints
#
# [[ 1. 1. 10.]
# [ 2. 3. 20.]
# [ 3. 3. 30.]
# [ 4. 5. 40.]]
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加