为了账号安全,请及时绑定邮箱和手机立即绑定

使用seaborn绘制热图时,可以将多行标记为一个标签吗?

使用seaborn绘制热图时,可以将多行标记为一个标签吗?

慕斯709654 2023-08-22 10:28:19
我正在绘制热图。我想用它的类别替换原来的 y 轴。例如:数据:                    Location 1    Location 2      Location 3cluster 1:    0       0.3           0.5              0.7cluster 1:    1       1.2           3.1              1.2cluster 1:    2       0.8           0.1              1.3cluster 2:    3       0.2           0.3              1.0cluster 2:    4       3.1           2.1              5cluster 3:    5       0.9           0.7              0.2我不想显示索引(0,1,2,3,4,5),而是想显示多行的簇号。我怎样才能做到这一点?
查看完整描述

1 回答

?
SMILET

TA贡献1796条经验 获得超4个赞

您可以循环浏览标签并将它们放置在平均值处。小 y 刻度线可以用作分隔符。


以下代码假设第一列具有集群标签(并且不会用于热图本身)。


import pandas as pd

import seaborn as sns

from io import StringIO

import matplotlib.pyplot as plt

from matplotlib.ticker import FixedLocator


data_str = '''    cluster                "Location 1"    "Location 2"      "Location 3"

"cluster 1"         0.3           0.5              0.7

"cluster 1"         1.2           3.1              1.2

"cluster 1"         0.8           0.1              1.3

"cluster 2"         0.2           0.3              1.0

"cluster 2"         3.1           2.1              5

"cluster 3"         0.9           0.7              0.2'''


df = pd.read_csv(StringIO(data_str), delim_whitespace=True)

ax = sns.heatmap(df[df.columns[1:]], cmap='rocket_r', annot=True)


ax.xaxis.tick_top()

ticks = []

labels = []

prev_label = None

for i, label in enumerate(df['cluster']):

    if label != prev_label:

        ticks.append(i)

        labels.append(label)

        prev_label = label

ticks.append(i + 1)

ax.yaxis.set_minor_locator(FixedLocator(ticks))

ax.yaxis.set_major_locator(FixedLocator([(t0 + t1) / 2 for t0, t1 in zip(ticks[:-1], ticks[1:])]))

ax.set_yticklabels(labels, rotation=0)

ax.tick_params(axis='both', which='major', length=0)

ax.tick_params(axis='y', which='minor', length=60)

plt.tight_layout()

plt.show()

https://img1.sycdn.imooc.com//64e41d700001e1db06090386.jpg

查看完整回答
反对 回复 2023-08-22
  • 1 回答
  • 0 关注
  • 80 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信