使用相同的渐变生成多个热图

时间:2017-06-22 18:48:32

标签: python matplotlib heatmap

我尝试使用相同的代码使用matplotlib创建多个热图。当然,所有这些热图的数据都不同。因此,热图上的颜色强度也不同。有没有办法确保强度范围保持不变?热图中的所有值都介于0和1之间。因此,我希望0.2中值heatmap1的颜色与0.2中的值heatmap2的颜色完全相同1}},即使两个热图都有不同的范围。

我为这个问题有点令人困惑的语言道歉,但我不知道如何更好地解释它。

这是我用来生成热图的代码:

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 个答案:

答案 0 :(得分:1)

确定最小值和最大值,并在代码中指定它们

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

我从this example

取出了这个