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

使用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 关注
  • 170 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号