在python中指定热图的颜色增量

时间:2017-06-01 14:44:59

标签: python-3.x matplotlib heatmap seaborn

有没有办法在Seaborn或Matplotlib中指定热图色标的颜色增量。例如,对于包含0-1之间的归一化值的数据帧,要指定100,离散的颜色增量,以便将每个值与其他值区分开来?

提前谢谢

1 个答案:

答案 0 :(得分:3)

将热图分解为n颜色有两种主要方法:

  1. 将数据四舍五入为n值。
  2. 使用离散色图。
  3. 以下代码显示了这两个选项。

    import pandas as pd
    import numpy as np
    import matplotlib.pyplot as plt
    
    x, y = np.meshgrid(range(15),range(6))
    v = np.random.rand(len(x.flatten()))
    df = pd.DataFrame({"x":x.flatten(), "y":y.flatten(),"value":v})
    
    df = df.pivot(index="y", columns="x", values="value")
    
    n = 4.
    
    
    fig, (ax0, ax, ax2) = plt.subplots(nrows=3)
    
    ### original
    im0 = ax0.imshow(df.values, cmap="viridis", vmin=0, vmax=1)
    ax0.set_title("original")
    
    ### Discretize array
    arr = np.floor(df.values * n)/n
    im = ax.imshow(arr, cmap="viridis", vmin=0, vmax=1)
    ax.set_title("discretize values")
    
    ### Discretize colormap
    cmap = plt.cm.get_cmap("viridis", n)
    im2 = ax2.imshow(df.values, cmap=cmap, vmin=0, vmax=1 )
    ax2.set_title("discretize colormap")
    
    
    #colorbars
    fig.colorbar(im0, ax=ax0)
    fig.colorbar(im, ax=ax)
    fig.colorbar(im2, ax=ax2, ticks=np.arange(0,1,1./n), )
    plt.tight_layout()
    plt.show()
    

    enter image description here