Seaborn热图改变了colorbar的大小

时间:2018-01-15 14:04:42

标签: python-3.x matplotlib heatmap seaborn

使用以下代码我将seaborn热图与彩条一起绘制。 我想将colorbar的大小设置为等于heatmap的大小。 我怎样才能做到这一点?

我尝试使用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()

enter image description here

3 个答案:

答案 0 :(得分:3)

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

话虽这么说,你可以使用seaborn.heatmap中的cbar_kws参数来操纵颜色条的大小。这需要是一个字典,通过(在引擎盖下)作为kwargs传递给matplotlibs fig.colorbar()

感兴趣的是一个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()

,并提供:

enter image description here

答案 1 :(得分:2)

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

如果您有多个 cbar_kws,通过名称=值对构造的字典提供 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)

答案 2 :(得分:1)

我认为您的问题在于数字比例。而不是声明...

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

...尝试保持比例均匀:

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

对我有用。