作者:etqq | 来源:互联网 | 2023-01-01 13:48
通过以下代码,我绘制了一个seaborn热图以及一个colorbar。我想将颜色条的大小设置为等于热图的大小。我该如何实现?
我尝试使用来解决颜色栏问题,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()
1> DavidG..:
如评论中所述,我无法使用Seaborn版本0.8和matplotlib 2.1.1重现此问题,因此,如果可能的话,我建议您更新模块。
话虽如此,您可以使用中的cbar_kws
参数来操纵颜色条的大小seaborn.heatmap
。这需要是一本字典,作为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()
给予: