繁体   English   中英

seaborn 热图中的自定义 xticks

[英]Custom xticks in seaborn heatmap

提示:本站为国内最大中英文翻译问答网站,提供中英文对照查看,鼠标放在中文字句上可显示英文原文

我有以下热图(只是一个最小的工作示例,我的数据量很大!)

df = pd.DataFrame({'set1': ['0', '2', '2'],
                   'set2': ['1', '2', '0'],
                   'set3': ['0', '2', '1'],
                   'set4': ['1', '4', '1']
                  }).T.astype(float)

sns.heatmap(df, yticklabels = df.index, xticklabels = df.columns) 

我怎样才能把 xticks 只放在那些所有rows>=2的地方? 在此示例中,它意味着仅放置“1”xtick

因此,在此图像中不应出现“0”和“2”列名称,只能出现“1”,因为这是所有值都大于或等于 2 的列。

问题是 x 轴变得太拥挤了。 我只想显示所有值 >= 2 的列的 xticklabels。仍在绘制所有内容,但只显示那些 xticklabels。

在此处输入图像描述

您是否希望显示相同的热图,但只显示所有值 >=2 的 xticklabels? 一种方法可能是不在热图中使用 df.columns,而是屏蔽并仅显示您想要的那些。 看看这是不是你要找的……

df = pd.DataFrame({'set1': ['0', '2', '2'],
                   'set2': ['1', '2', '0'],
                   'set3': ['0', '2', '1'],
                   'set4': ['1', '4', '1']
                  }).T.astype(float)

cols = [] ## Declare a new list to be used for xticklabels
for col in df.columns:
    if col in set(df.columns).intersection(df[df >= 2].T.dropna().index):
        cols.append(col) ##If all values are >=2, then add to label list
    else:
        cols.append('') ## Else, add blank

sns.heatmap(df, yticklabels = df.index, xticklabels = cols) ##Plot using new list

在此处输入图像描述

掩码 DataFrame

  • 删除值不>=到指定值的列
# create a Boolean mask of df
mask = df.ge(2)

# apply the mask to df and dropna
dfm = df[mask].dropna(axis=1)

# plot the masked df
ax = sns.heatmap(dfm)

在此处输入图像描述

mask

          0     1      2
set1  False  True   True
set2  False  True  False
set3  False  True  False
set4  False  True  False

屏蔽 xtick 标签

  • 值不>=到指定值的列的标签将替换为''
# create a Boolean mask of df
mask = df.ge(2).all()

# use the mask to update a list of labels
cols = [col if m else '' for (col, m) in zip(df.columns, mask)]

# plot with custom labels
ax = sns.heatmap(df, xticklabels=cols)

在此处输入图像描述

mask

0    False
1     True
2    False
dtype: bool
问题未解决?试试搜索: seaborn 热图中的自定义 xticks
暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2023 STACKOOM.COM