如何使用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()
这不会缩放,有时还会为两个不同列中的条目赋予几乎相同的颜色。
如何系统地选择调色板,以便在缩放列颜色以及区分列中的值的同时进行缩放?