<p>基于上述答案,下面是一个以不同方式为主要三个分支着色的示例,暴力(前49行为红色,后35行为绿色,最后62行为蓝色,其余两行为黑色):</p>
<pre><code>import matplotlib.pyplot as plt
import seaborn as sns; sns.set(color_codes=True)
import pandas as pd
iris = sns.load_dataset("iris")
species = iris.pop("species")
g = sns.clustermap(iris)
lut = dict(zip(species.unique(), "rbg"))
row_colors = species.map(lut)
# For demonstrating the hierarchical sidebar coloring
df_colors = pd.DataFrame(data={'r': row_colors[row_colors == 'r'], 'g': row_colors[row_colors == 'g'], 'b': row_colors[row_colors == 'b']})
# Simple class RGBA colormap
colmap = {'setosa': (1, 0, 0, 0.7), 'virginica': (0, 1, 0, 0.7), 'versicolor': (0, 0, 1, 0.7)}
g = sns.clustermap(iris, row_colors=df_colors, tree_kws={'colors':[(1,0,0,1)]*49+[(0,1,0,1)]*35+[(0,0,1,1)]*63+[(0,0,0,1)]*2})
plt.savefig('clustermap.png')
</code></pre>
<p><a href="https://i.stack.imgur.com/LWIaa.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/LWIaa.png" alt="Brute Force coloring"/></a></p>
<p>对于一般情况,可从树状图(此处描述<a href="https://stackoverflow.com/questions/9838861/scipy-linkage-format/40983611#40983611">scipy linkage format</a>)中得出要着色的线条数:</p>
<pre><code>n_leaves = len(g.dendrogram_row.linkage)+1
n0_ndx = len(g.dendrogram_row.linkage) - 1
n1_ndx = int(g.dendrogram_row.linkage[n0_ndx][0])-n_leaves
n2_ndx = int(g.dendrogram_row.linkage[n0_ndx][1])-n_leaves
n21_ndx = int(g.dendrogram_row.linkage[n2_ndx][0])-n_leaves
n22_ndx = int(g.dendrogram_row.linkage[n2_ndx][1])-n_leaves
n1 = int(g.dendrogram_row.linkage[n1_ndx][3])-1
n21 = int(g.dendrogram_row.linkage[n21_ndx][3])-1
n22 = int(g.dendrogram_row.linkage[n22_ndx][3])-1
g = sns.clustermap(iris, row_colors=df_colors, tree_kws={'colors':[(1,0,0,1)]*n1+[(0,1,0,1)]*n21+[(0,0,1,1)]*n22+[(0,0,0,1)]*(n_leave\
s-1-n1-n21-n22)})
</code></pre>
<p>尽管如此,我还没有找到一种方法来改变顶部树状图的颜色</p>