为matplotlib / seaborn中的离散数据制作可区分的热图

时间:2019-07-21 15:15:14

标签: python matplotlib seaborn

如何使用matplotlib / seaborn绘制分类数据的热图?数据矩阵具有离散值,我想对其进行可视化处理,以使每一列使用不同的颜色(不同的调色板),并且一列中的不同值尽可能可区分。

这是我尝试绘制一个20行乘4列的小矩阵。我手动命名了四个不同的调色板,因此这不会扩展到更大的矩阵。

import matplotlib.pylab as plt
import seaborn as sns
import numpy as np
plt.figure()
np.random.seed(10)
bigdata = np.random.randint(0,12,size=(20, 10))
smalldata = np.random.randint(0,12,size=(20,4))
data = smalldata
palettes = ["Reds", "Greens", "Blues", "Greys"]
xy = [0.0, 0.0]
ax = plt.subplot(111)
for c in range(data.shape[1]):
    xy[1] = 0.0
    colors = {}
    uniq_vals = set(data[:, c])
    num_uniq = len(uniq_vals)
    color_pal = sns.color_palette(palettes[c], n_colors=num_uniq, desat=0.9)
    for r in range(data.shape[0]):
        val = data[r, c]
        if val not in colors:
            colors[val] = color_pal.pop(0)
        rect = plt.Rectangle(xy, 1, 1, facecolor=colors[val])
        ax.add_patch(rect)
        xy[1] += 1.0
    xy[0] += 1.0
    xy[1] = 0.0
plt.xlim(0, data.shape[1])
plt.ylim(0, data.shape[0])
plt.show()

heatmap

这不会缩放,有时还会为两个不同列中的条目赋予几乎相同的颜色。

如何系统地选择调色板,以便在缩放列颜色以及区分列中的值的同时进行缩放?

0 个答案:

没有答案