2017-06-29 35 views
0

我從文本文件中輸入數據與柱結構或多或少像這樣:重新縮放軸從熊貓數據幀

x y density 

我需要繪製密度的熱圖(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)轉置數據幀,並使用OrbData.index得到y值

3)手動重新調節軸在pyplot不知何故

我正在爲動畫製作〜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.尺寸),密度爲第三維。如果調整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數據從熊貓數據框中提取出來。 –