【问题标题】:Move seaborn clustermap row_colors bar to the other side of the plot?将 seaborn clustermap row_colors 条移动到绘图的另一侧?
【发布时间】:2021-01-12 11:44:22
【问题描述】:

默认情况下,seaborn row_colors 条位于绘图的左侧。我要做的就是将它移到右侧......这里有一些简单的代码来复制这个问题:

import seaborn as sns
import numpy as np
from matplotlib import colors, cm

matrix = np.random.randint(0,5,(5,5))
coolwarm_cm = cm.ScalarMappable(norm=colors.Normalize(vmin=0, vmax=10),
                                cmap='coolwarm')
lut =  lambda x: coolwarm_cm.to_rgba(x)
row_colors = np.array([lut(xi) for xi in np.arange(5)])

g = sns.clustermap(matrix,
                   row_cluster=False,
                   col_cluster=False,
                   row_colors=row_colors,
                   cmap='binary',
                   cbar_pos=None)


g.ax_heatmap.tick_params(axis='y', labelright=False,labelleft=True,
                         right=False, left=True)

【问题讨论】:

  • g.ax_row_colors 应该给你有问题的轴。您希望刻度保持在左侧还是向右移动?
  • 我一直在使用 g.ax_heatmap.tick_params 函数(见下文)来编辑刻度,所以我并不在意,因为之后我总是会搞砸这些。我只想移动酒吧本身。 g.ax_heatmap.tick_params(axis='y', labelright=False,labelleft=True, right=False, left=True)

标签: python matplotlib seaborn


【解决方案1】:

可能绝对是一种更清洁的方法。 g.ax_row_colors 返回有问题的轴,然后您可以修改其位置:

ax_row_colors = g.ax_row_colors
box = ax_row_colors.get_position()

box_heatmap = g.ax_heatmap.get_position()
ax_row_colors.set_position([box_heatmap.max[0], box.y0, box.width*1.5, box.height])

输出:

【讨论】:

  • 您有相关文档的链接吗?我在seaborn github 代码中找不到这个问题的答案:github.com/mwaskom/seaborn/blob/master/seaborn/matrix.py
  • @DavidErickson - 老实说,我主要是在 matplotib 文档中挖掘。从dir(g) 我可以看出有问题的轴是ax_row_colorsax_heatmap。之后就是直接的matplotlib。最后一行似乎是 hack-y,因此是第一句话。我猜有一种更高级的Bbox 方法。
猜你喜欢
  • 2020-09-01
  • 2019-01-19
  • 2015-12-28
  • 2018-06-03
  • 1970-01-01
  • 1970-01-01
  • 2016-04-06
  • 2019-02-16
  • 2014-02-24
相关资源
最近更新 更多