如何调整Seaborn clustermap的colorbar方向、边框颜色及刻度长度
实现方案及完整代码
你需要先接收seaborn.clustermap返回的ClusterGrid对象,从对象中提取colorbar实例再做自定义修改,完整可运行代码如下:
import numpy as np import seaborn as sns import matplotlib.pyplot as plt # 生成模拟数据 corr = np.corrcoef(np.random.randn(10, 200)) # 定义 clustermap 参数 kws = dict( cbar_kws=dict(label='Label', ticks=[0,0.50,1], orientation='horizontal'), figsize=(6, 6), # 可选参数:调整水平colorbar的位置,四个参数依次为 左、下、宽度、高度 # cbar_pos=(0.2, 0.92, 0.6, 0.03) ) # 接收clustermap返回的ClusterGrid对象 g = sns.clustermap(corr, cmap="Blues", xticklabels=False, yticklabels=False, **kws) # 获取colorbar对象 cbar = g.cbar # 需求2:修改colorbar边框颜色,示例为红色,可替换为任意颜色值 cbar.outline.set_edgecolor('red') # 需求3:修改colorbar刻度长度,示例为8,数值越大刻度越长 cbar.ax.tick_params(length=8) plt.show()
各需求实现逻辑
- 需求1(水平colorbar):你传入
cbar_kws的orientation='horizontal'已经可以实现水平效果,对默认位置不满意的话,可以新增cbar_pos参数自定义colorbar的位置和尺寸。 - 需求2(修改边框颜色):seaborn clustermap生成的colorbar对象挂载在返回的ClusterGrid实例上,直接调用其outline属性的
set_edgecolor方法即可设置边框颜色。 - 需求3(修改刻度长度):通过colorbar关联的ax对象调用
tick_params方法,传入length参数即可调整刻度长度,该方法还支持同时调整刻度宽度、颜色、标签大小等属性。
之所以直接查matplotlib.pyplot.colorbar的文档没有找到可行方案,是因为seaborn clustermap独立封装了colorbar的渲染逻辑,不会直接返回plt.colorbar的调用结果,很多自定义属性需要拿到返回的ClusterGrid实例后手动修改,不能完全靠传参实现。
内容的提问来源于stack exchange,提问作者Cactus Philosopher
相关产品推荐
相关产品推荐

