2017-06-29 4 views
0

Iは、多かれ少なかれ、このようなカラム構造を持つテキストファイルからデータを入力している:パンダデータフレームからpcolorのプロット上の軸を再スケーリング

x y density 

Iは密度のヒートマップ(X、Yをプロットするために必要)。

私はpyplotとpandasを使い始めています。この機能を効率的に達成する方法がわかりません。

私は最初だけの列にロードし

plt.pcolor(OrbData[['x']], OrbData[['y']], OrbData[['density']] ) 

でプロット試みたが、色の値は、アレイ内でなければならないので、これは失敗しました。だから私はxとyの値をマルチインデックスとして使用し、データフレームをアンパックします。

はここで、これはほぼ完璧に動作します私のスクリプト

import matplotlib.pyplot as plt 
import numpy as np 
import pandas as pd 

Morbs = 2 
OrbFile = "69.0000000orbs.dat" 

### Load in the data using pandas 
OrbData = pd.read_csv(OrbFile, sep='\s+', usecols = [ 0, 1, 7 ], header= None, names=['x','y','density'], skiprows=2) 
OrbData = OrbData.set_index(['x','y']) 
OrbData=OrbData.unstack() 

plt.figure(1) 
plt.pcolor(OrbData[['density']], cmap='hot') 
plt.gca().set_aspect('equal') 
plt.show() 

ですが、プロットの軸は、レコード番号(0,50)ではなくインデックス値(-2,2)を示しています。

解凍したデータでplt.pcolor(OrbData[['x']], OrbData[['y']], OrbData[['Mag1']], cmap='hot')を試してみると、エラー KeyError: "['x'] not in index"が表示されます。

OrbData.indexを使用してインデックス値にアクセスしようとすると、x値(行)のみが復元され、y値(列)にアクセスする方法はわかりません。

私はこれを行うと考えることができるいくつかの方法がありますが、それらはすべてハッキーで非効率です。

1)Xを保存、Y列別々前アンパック

2)データフレームを転置し、手動pyplotに何とか

の軸を再スケール

3)y値を取得するOrbData.indexを使用

私はアニメーションのために〜10^5のプロットを作ろうとしており、各プロットは少なくとも10^4のレコードを持っていますので、あまりにも無駄ではないものが必要です。
pcolorが読むことができる形式でカラムデータから値を引き出す簡単な方法が必要です。

+0

がmatplotlib.axes.Axes.contourfを使用メソッド:https://matplotlib.org/api/_as_gen/matplotlib.axes.Axes.contourf.htmlこれは、軸としてのxとy(1次元と2次元)と3次元の密度を持つ3D画像を提供します。 cmapパラメータを調整すると、密度の異なる色をプロットすることができます。 – 2Obe

+0

ここで満足のいく答えが得られないのは、データがどのように整理され、どのように見えるか分かりません。 [mcve]と明確な問題の説明を入力してください。 – ImportanceOfBeingErnest

答えて

-1

切り取らこのコードは、ジェイクVanderPlasからPythonのデータ科学ハンドブックの外にある。このような

import pandas as pd 
import numpy as np 
import matplotlib.pyplot as plt 


x=np.linspace(0,10,100) 
y=np.linspace(0,10,100) 

def density(x,y): 
    return np.sin(x) ** 10 + np.cos(10 + y * x)*np.cos(x) 

X,Y=np.meshgrid(x,y) 
Z=density(X,Y) 


plt.contourf(X,Y,Z,cmap="magma") 


plt.show() 

このアプローチ利回り結果:

Result

+1

答えを提供する時間をとってくれてありがとう、しかし私はこれが質問に答えるとは思わない。 パンダのデータフレームからX、Yデータを引き出す方法を見つける必要があります。 –

関連する問題