2017-01-31 12 views
3

私は4列の測定データを含むpandasデータフレームを持っています。私は、行インデックスをX、列インデックスをY、データをZとして3Dサーフェスプロットを作成したいと考えています(各列のデータは、一連の離散的な測定結果であり、すべての値私は以下のように私はこのように、DFのインデックスを使用することができる場合、私は本当に必要なものを理解し、かわからないnp.meshgrid使用してnumpyのグリッドにDFを変換しようとした2DPandasデータフレームのMatplotlib 3Dサーフェスプロット

import pandas as pd 
import numpy as np 


df = pd.DataFrame(np.random.randn(5, 4), columns=['A', 'B', 'C', 'D']) 
print(df) 

    A   B   C   D 
0 0.791692 -0.945571 0.183304 2.039369 
1 -0.474666 1.117902 -0.483240 0.137620 
2 1.448765 0.228217 0.294523 0.728543 
3 -0.196164 0.898117 -1.770550 1.259608 
4 0.646730 -0.366295 -0.893671 -0.745815 

各カテゴリY)用Xの。

import matplotlib as mpl 
import matplotlib.pyplot as plt 
from mpl_toolkits.mplot3d import Axes3D 

x = df.columns 
y = df.index 
X,Y = np.meshgrid(x,y) 
Z = df 
fig = plt.figure() 
ax = fig.add_subplot(111, projection='3d') 
ax.plot_surface(X, Y, Z) 

私はmatplotlib 3Dチュートリアルと関連する回答をここで読んだことがありますが、まだ固まっています。誰かが私を正しい方向に向けることができれば非常に感謝します。

答えて

2

あなたが追求する一般的な戦略は問題ありません。唯一のエラーは、文字列のリストからmeshgridを作成することです。もちろん、maplotlibは文字列をプロットすることはできません。

データフレーム内の列数と同じ長さの配列を作成し、それをmeshgridに差し込むことができます。

x = np.arange(len(df.columns)) 
+0

いやはや!アプローチが完全に間違っていたと自信を持っていたので、明らかに見落とされました。どうもありがとうございました! – Violet

1

カラム名(['A'、 'B'、 'C​​'、 'D'])を取るだけで動作するはずです。

['A'、 'B'、 'C​​'、 'D']の軸のティックを後で変更することができます。

import pandas as pd 
import numpy as np 


df = pd.DataFrame(np.random.randn(5, 4)) 

import matplotlib as mpl 
import matplotlib.pyplot as plt 
from mpl_toolkits.mplot3d import Axes3D 

x = df.columns 
y = df.index 
X,Y = np.meshgrid(x,y) 
Z = df 
fig = plt.figure() 
ax = fig.add_subplot(111, projection='3d') 
ax.plot_surface(X, Y, Z) 

enter image description here

関連する問題