Python seaborn子地块中每行的颜色栏

Python seaborn子地块中每行的颜色栏,python,matplotlib,seaborn,visualization,Python,Matplotlib,Seaborn,Visualization,我看过类似的文章,但没有一篇对我很有效。我要做的是显示2x4个热图,每行的末尾都有一个与热图高度相同的联合色条 我用2x5创建轴,这样每行末尾有4个矩阵和1个色条轴。l2_距离这是一个包含四个条目的字典,其中来自MAPPING_DICT的每个键都与一个矩阵关联(大小都相同) 我认为最好的方法是为我绘制的每个热图设置cbar=False,并将它们放在轴(0-3)中,而每行的最后一个热图,即在索引3的轴上绘制的热图在cbar\u ax=axs[0,4]中绘制色条 import seaborn as

我看过类似的文章,但没有一篇对我很有效。我要做的是显示2x4个热图,每行的末尾都有一个与热图高度相同的联合色条

我用2x5创建
,这样每行末尾有4个矩阵和1个色条轴。
l2_距离
这是一个包含四个条目的字典,其中来自
MAPPING_DICT
的每个键都与一个矩阵关联(大小都相同)

我认为最好的方法是为我绘制的每个热图设置
cbar=False
,并将它们放在轴(0-3)中,而每行的最后一个热图,即在索引
3的轴上绘制的热图
cbar\u ax=axs[0,4]
中绘制色条

import seaborn as sns
import matplotlib.pyplot as plt

 MAPPING_DICT = {"P": 0, "A": 1, "C": 2, "S": 3}

 fig, axes = plt.subplots(2,5, sharex=True, sharey=True)
 for env_name in l2_distances:
     l2_dist_matrix = l2_distances[env_name]
     cbar_flag = True if MAPPING_DICT[env_name]==3 else False
     sns.heatmap(l2_dist_matrix, ax=axes[0, MAPPING_DICT[env_name]], linewidths=0.2, square=True, cbar=cbar_flag, cbar_ax=axes[0,4], cmap="Blues", xticklabels=False, yticklabels=False, robust=True)
但是,这不太管用,因为颜色栏打印在(某种程度上)正确的位置,但没有标签,高度错误。下面是它的最上面一行(添加了一些对colormap行为没有影响的额外可视化内容),最下面一行基本上是类似的:


我已经尝试过显式地设置新的轴位置,但这相当乏味,而且效果也不太好。有什么我遗漏的吗?

主要问题是,使用
sharex=True
sharey=True
将使色条与其他子图具有相同的轴。这会对颜色条造成太多的干扰

显示了一种删除颜色栏共享的方法。这仍然有一些棘手的副作用,我无法解决

下面的解决方案使用
sharex=False
sharey=False
创建子地块,然后开始共享除色条之外的所有子地块。由于色条不需要像其他子批次那样宽,因此可以设置适当的
宽度/u比率

将numpy导入为np
导入seaborn作为sns
将matplotlib.pyplot作为plt导入
映射_DICT={“P”:0,“A”:1,“C”:2,“S”:3}
l2_距离={“P”:np.random.rand(10,10),“A”:np.random.rand(10,10),“C”:np.random.rand(10,10),
“S”:np.random.rand(10,10)}
图,轴=plt.子批次(nrows=2,ncols=5,sharex=False,sharey=False,figsize=(16,8),
gridspec_kw={'width_ratio':[10,10,10,1]})
shax=轴[0,0]。获取共享的轴()
shay=轴[0,0]。获取共享的轴()
对于轴[:,:-1].ravel()中的ax:
shax.join(轴[0,0],ax)
轴连接(轴[0,0],轴)
对于范围内的行(轴形状[0]):
对于l2_距离中的环境名称:
l2_距离矩阵=l2_距离[环境名称]
打印(环境名称、二级距离矩阵形状)
如果映射DICT[env_name]==3,则cbar_标志=True,否则为False
sns.热图(l2_dist_矩阵,ax=轴[row,MAPPING_DICT[env_name]),线宽=0.2,平方=真,
cbar=cbar\u标志,cbar\u ax=axs[row,-1],cmap=“Blues”,xticklabels=False,yticklabels=False,
稳健=真实)
plt.show()

您的问题是
sharex
sharey
也会影响色条。请参阅以获取删除色条共享的方法。啊,我明白了,非常感谢!