2011-05-03 194 views
3

我最近偶然發現了一個關於how to generate a heatmap of frequencies in Python using the MatPlotLib module的類似問題。在Python中生成頻率熱圖MatPlotLib從.csv文件中讀取X和Y座標

這篇文章非常有用,我可以獲得單獨的腳本運行併爲代碼固有生成的隨機測試數據創建熱圖。但是,我無法修改代碼來爲我正在使用的數據創建熱圖。數據以逗號分隔格式(.csv)。

我目前在此.csv文件中保存了3788對平均質量等級。這些平均質量等級的範圍都是從0到5.我試圖創建一個熱圖,在x軸和y軸上以.5爲增量(0-.499,.5-.999,1-1.499等等)。

我想導入.csv文件的第一列(webqualityratings)作爲熱圖的x值和.csv文件的第二列(inpersonqualityratings)作爲熱圖的y值。

我正在試圖通過發佈「ptomato」適應和編輯麥克·格雷厄姆的代碼如下:

import numpy as np 
import numpy.random 
import matplotlib.pyplot as plt 

# Generate some test data 
x = np.random.randn(8873) 
y = np.random.randn(8873) 

heatmap, xedges, yedges = np.histogram2d(x, y, bins=50) 
extent = [xedges[0], xedges[-1], yedges[0], yedges[-1]] 
plt.clf() 
plt.imshow(heatmap, extent=extent) 
plt.show() 

如果有人可以幫助我適應這個代碼從我的.csv在數據讀取文件如指定,我會永遠感激!

回答

-1

Python有一個絕對壯觀的CSV文件庫:

http://docs.python.org/library/csv.html

雖然我不知道matplotlib的細節,下面的代碼將遍歷製表符分隔CSV文件,並執行您的代碼在每個第一和第二列上。

import numpy as np 
import numpy.random 
import matplotlib.pyplot as plt 
import csv 

with open(yourInputFile, "rb") as mycsv: 
    reader = csv.DictReader(mycsv, dialect='excel-tab') 

    for row in reader: 
     x = row['name of first column'] 
     y = row['name of second column'] 
     heatmap, xedges, yedges = np.histogram2d(x, y, bins=50) 
     extent = [xedges[0], xedges[-1], yedges[0], yedges[-1]] 
     plt.clf() 
     plt.imshow(heatmap, extent=extent) 

plt.show() 

請注意,我使用DictReader變體,它需要一個標題才能工作。無論是在文件的開頭,還是作爲構造函數的輸入。你也可以使用普通的閱讀器,但它使用列號而不是名稱,而且在100多個字段中很難使用。

如果需要,您可以更改特定csv文件的方言,甚至創建自己的方言。

最後,請注意,我對matplotlib一無所知,而且這段代碼很可能是錯誤的。

5

既然你有numpy在您的處置,並假設您的CSV文件有適當的行爲,你可以使用numpy.loadtxt()

import numpy as np 
import matplotlib.pyplot as plt 

dat = np.loadtxt('mydata.csv') 

x, y = dat[:,0], dat[:,1] 

heatmap, xedges, yedges = np.histogram2d(x, y, bins=50) 
extent = [xedges[0], xedges[-1], yedges[0], yedges[-1]] 
plt.clf() 
plt.imshow(heatmap, extent=extent) 
plt.show()