如何根据 Python 中的组 highlight/change 为标签着色?

How to highlight/change color to labels based on a group in Python?

我正在使用 imshow 函数绘制 N×N 相似度矩阵。键变量是图形的标签。在另一个文件中,每个键都关联到一个组(例如 A,B = group1C = group2E,F = group3)。我想根据标签所属的组用不同颜色突出显示图表中的标签。

fig, ax = plt.subplots(figsize = (50,50))
im = ax.imshow(matrix)
ax.set_xticks(np.arange(len(keys)))
ax.set_yticks(np.arange(len(keys)))
ax.set_xticklabels(keys)
ax.set_yticklabels(keys)

plt.setp(ax.get_xticklabels(), rotation=90, ha="right",
         rotation_mode="anchor")

fig.colorbar(im, ax=ax, shrink = 0.3, pad = 0.02)

plt.show()

如果你有一个与键长度相同的列表,以及相应的组 ID,你可以同时遍历刻度和组,并分配相应的颜色。

下面是一些示例代码:

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

keys = ['A', 'B', 'C', 'D', 'E', 'F']
groups = [1, 1, 2, 3, 3, 3]
colors = {1: 'navy', 2: 'crimson', 3: 'limegreen'}
fig, ax = plt.subplots(figsize=(12, 10))
im = ax.imshow(pd.DataFrame(np.random.rand(10, 6)).corr(), cmap='inferno', aspect='equal')
ax.set_xticks(np.arange(len(keys)))
ax.set_yticks(np.arange(len(keys)))
ax.set_xticklabels(keys, size=20)
ax.set_yticklabels(keys, size=20)

plt.setp(ax.get_xticklabels(), rotation=90, ha="right", rotation_mode="anchor")

for xtick, ytick, group in zip(ax.get_xticklabels(), ax.get_yticklabels(), groups):
    xtick.set_color(colors[group])
    ytick.set_color(colors[group])

fig.colorbar(im, ax=ax, shrink=0.3, pad=0.02)

plt.show()