2017-06-22 54 views
0

我試圖使用matplotlib使用相同的代碼創建多個熱圖。當然,所有這些熱圖的數據都不相同。正因爲如此,熱點圖上的顏色強度是不同的。有沒有一種方法可以確保強度範圍保持不變?我所有的熱點地圖值都介於0和1之間。因此,我希望heatmap1中的值0.2的顏色看起來與的顏色的顏色完全相同,即使這兩個熱圖可能具有不同的範圍。使用相同的梯度生成多個熱圖

我很抱歉這個問題有些令人困惑,但我不知道如何更好地解釋它。

下面是我使用生成熱圖的代碼:

from matplotlib import pyplot as plt 

def show_values(pc, fmt="%.2f", **kw): 
    ''' 
    Heatmap with text in each cell with matplotlib's pyplot 
    Source: http://stackoverflow.com/a/25074150/395857 
    By HYRY 
    ''' 
#  from itertools import izip 
    try: 
     # Python 2 
     from itertools import izip 
    except ImportError: 
     # Python 3 
     izip = zip 
    pc.update_scalarmappable() 
    ax = pc.get_axes() 
    for p, color, value in izip(pc.get_paths(), pc.get_facecolors(), pc.get_array()): 
     x, y = p.vertices[:-2, :].mean(0) 
     if np.all(color[:3] > 0.5): 
      color = (0.0, 0.0, 0.0) 
     else: 
      color = (1.0, 1.0, 1.0) 
     ax.text(x, y, fmt % value, ha="center", va="center", color=color, **kw) 


df= pd.read_csv("filepath", header=None) 
fig, ax = plt.subplots(figsize=(20, 10)) 
heatmap = plt.pcolor(df,cmap=matplotlib.cm.Blues) 
ax.set_yticks(np.arange(df.shape[0]) + 0.5, minor=False) 
ax.set_xticks(np.arange(df.shape[1]) + 0.5, minor=False) 
ax.set_xticklabels(xlabels, minor=False, rotation=45) 
ax.set_yticklabels(ylabels, minor=False) 
plt.ylim((0, df.shape[0])) 
plt.gca().invert_yaxis() 
plt.title("plot title") 
show_values(heatmap) 
plt.show() 

任何幫助將非常感激。

回答

1

確定您的最小值和最大值,並在代碼

plt.pcolor(x, y, z, cmap='RdBu', vmin=z_min, vmax=z_max) 

我把這個從this example

+0

就像一個魅力的工作這麼多的指定,謝謝。 – Patthebug