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が読むことができる形式でカラムデータから値を引き出す簡単な方法が必要です。
がmatplotlib.axes.Axes.contourfを使用メソッド:https://matplotlib.org/api/_as_gen/matplotlib.axes.Axes.contourf.htmlこれは、軸としてのxとy(1次元と2次元)と3次元の密度を持つ3D画像を提供します。 cmapパラメータを調整すると、密度の異なる色をプロットすることができます。 – 2Obe
ここで満足のいく答えが得られないのは、データがどのように整理され、どのように見えるか分かりません。 [mcve]と明確な問題の説明を入力してください。 – ImportanceOfBeingErnest