Seaborn 热图更改颜色条的大小

新手上路,请多包涵

使用以下代码,我绘制了一个 seaborn 热图和一个颜色条。我想将颜色条的大小设置为等于热图的大小。我怎样才能做到这一点?

我试图使用 fig.colorbar(heatmap) 来处理颜色条,但这会返回错误:

 AttributeError: 'AxesSubplot' object has no attribute 'autoscale_None'

代码:

 fig,ax=plt.subplots(figsize=(30,60))

cmap = plt.get_cmap('inferno',30)
cmap.set_under('white')#Colour values less than vmin in white
cmap.set_over('yellow')# colour valued larger than vmax in red

Crosstab=50000*np.random.randn(10,10)

heatmap=sns.heatmap(Crosstab[::-1],cmap=cmap,annot=False,square=True,ax=ax,vmin=1,vmax=50000,linewidths=0.8,linecolor="grey")

plt.show()

在此处输入图像描述

原文由 2Obe 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.8k
2 个回答

如评论中所述,我无法使用 Seaborn 版本 0.8 和 matplotlib 2.1.1 重现此问题,因此如果可能的话我建议更新模块。

也就是说,您可以使用 --- 中的 seaborn.heatmap cbar_kws 参数来操纵颜色条的大小。这需要是一个字典,它作为 kwargs 传递(在幕后)到 matplotlibs fig.colorbar()

感兴趣的一个 kwarg 是 shrink 参数。这缩小了颜色条的大小:

_缩小_:1.0;乘以颜色条大小的分数

默认值 为 1.0,因此您可以尝试手动将其设置为 1。但是,如果这不起作用,您可以通过使用较低的值来进一步缩小颜色栏。这可能需要一些修补才能使颜色条大小合适。

 fig, ax = plt.subplots()

cmap = plt.get_cmap('inferno',30)
cmap.set_under('white')#Colour values less than vmin in white
cmap.set_over('yellow')# colour valued larger than vmax in red

Crosstab=50000*np.random.randn(10,10)

heatmap=sns.heatmap(Crosstab[::-1],cmap=cmap,annot=False,square=True,ax=ax,vmin=1,vmax=50000,
                    cbar_kws={"shrink": 0.5},linewidths=0.8,linecolor="grey")

plt.show()

给予:

在此处输入图像描述

原文由 DavidG 发布,翻译遵循 CC BY-SA 3.0 许可协议

跟进 DavidG 非常有用的答案和 Yuca 的问题(抱歉,我无法发表评论):

如果您有多个 cbar_kws,通过由 name=value 对构造的字典提供 cbar_kws 会很有用。

例如,我用于 seaborn 热图的常见 cbar_kws 字典:

cbar_kws=dict(use_gridspec=False,location="bottom",pad=0.01,shrink=0.25)

在这里,Yuca 可以执行以下操作来缩小 cbar 并更改填充(尝试几个填充值以查看哪个看起来最好):`cbar_kws=dict(shrink=0.5,pad=0.01)

原文由 djproc 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进