2014-02-17 149 views
1

我有三維數據,我想繪製爲以下直方圖here。 對於每個倉我有兩列如在matplotlib中繪製二維直方圖作爲熱圖

1.12 0.65 
1.41 0.95 
1.78 1.04 
2.24 2.12 

等的第一列的第一個條目(在.txt)的文本文件讓我對所述第一瓦片的中心的值時,第二第一列的行給我第二個瓷磚的中心值等。第二列是指顏色條上的值。第一列中的值以及箱尺寸是對數間隔的。我想在matplotlib中儘可能地繪製這個圖(忽略箭頭)。

+2

你嘗試過這麼遠嗎?我會建議使用'plt.imshow'或'plt.pcolor'。 – wflynny

+0

你可能想用'bar'和''''''kwarg +'color' kwarg。 http://matplotlib.org/examples/pylab_examples/bar_stacked.html – tacaswell

+0

我不知道如何使用'pcolor'時,數據只佔據該圖的一部分,即不是一個完整的網格。 – lawrence721

回答

1

我建議你使用PolyCollection:

import numpy as np 
import pylab as pl 
import matplotlib.collections as mc 

x = np.logspace(1, 2, 20) 
polys = [] 
values = [] 
for xs, xe in zip(x[:-1], x[1:]): 
    y = np.logspace(1.0, 2+np.random.rand()+2*np.log10(xs), 30) 
    c = -np.log(xs*y) 
    yp = np.c_[y[:-1], y[:-1], y[1:], y[1:]] 
    xp = np.repeat([[xs, xe, xe, xs]], len(yp), axis=0) 
    points = np.dstack((xp, yp)) 
    polys.append(points) 
    values.append(c[:-1]) 

polys = np.concatenate(polys, 0) 
values = np.concatenate(values, 0) 

pc = mc.PolyCollection(polys) 
pc.set_array(values) 
fig, ax = pl.subplots() 
ax.add_collection(pc) 
ax.set_yscale("log") 
ax.set_xscale("log") 
ax.autoscale()  
pl.colorbar(mappable=pc) 

這裏是輸出:

enter image description here