在 Seaborn / Matplotlib 中绘制彩条周围的轮廓线

4
使用seaborn heatmap之后,我有几个颜色条作为轴实例,但不知道如何在结果颜色条周围绘制黑色轮廓线。
可以使用axhlineaxvline打开X轴和Y轴,但是如何绘制右侧和上方的轴线以完成框架呢?
我已经尝试过set_visibleset_linewidthset_color,但没有成功。
import numpy as np 
from pandas import DataFrame
import seaborn as sns
import matplotlib.pyplot as plt


Index= ['aaa', 'bbb', 'ccc', 'ddd', 'eee']
Cols = ['A', 'B', 'C', 'D']
df = DataFrame(abs(np.random.randn(5, 4)), index=Index, columns=Cols)


figure = plt.figure(figsize=(12,12))
grid_spec = plt.GridSpec(1,4, width_ratios=[5,1,5,1], height_ratios=[1,1], wspace=0.6, hspace=0.3)

heatmap1ax = figure.add_subplot(grid_spec[0])
cbar1ax = figure.add_subplot(grid_spec[1])
heatmap2ax = figure.add_subplot(grid_spec[2])
cbar2ax = figure.add_subplot(grid_spec[3])

sns.set_style("white", {'axes.linewidth': 1, 'grid.color': 'black', 'xtick.major.size': 10, 'ytick.major.size': 0}) 
sns.heatmap(df, cmap='cool', ax=heatmap1ax, cbar_ax=cbar1ax)
sns.heatmap(df[['A']], cmap='cool', ax=heatmap2ax, cbar_ax=cbar2ax)

for axis in ['top','bottom','left','right']:
    heatmap1ax.spines[axis].set_visible(True)
    heatmap1ax.spines[axis].set_color('black')
    heatmap2ax.spines[axis].set_visible(True)
    heatmap2ax.spines[axis].set_color('black')    

plt.show()

这将产生以下结果:

enter image description here

但是我该如何为色条添加类似的轮廓线呢?
我可以直接修改seaborn matrix.py文件,但我希望有一种matplotlib的方法。

2
能否添加一个 MCVE - tmdavison
1个回答

3
我认为你要找的命令是set_frame_on。来自 matplotlib的“axes”API

set_frame_on(b)

设置是否绘制轴矩形补丁

接受:[ True | False ]

因此,将其添加到您的代码中

cbar1ax.set_frame_on(True)
cbar2ax.set_frame_on(True)

在您的图表中,为每个色条添加一个框架,以您想要的方式(如果我理解正确)。

非常感谢,我担心我的投票还没有计入,因为这是我的第一篇帖子,但这解决了我的问题。我完全忽略了matplotlib文档中的这种方法。 - orgelzyklus
@orgelzyklus 很高兴能够帮助。如果这个答案解决了你的问题,你仍然可以将其标记为“已接受”(我认为你不需要声望点数来做到这一点)。更多信息请参见这里 - Pablo Arnalte-Mur
再次感谢,我以为我已经做了。 - orgelzyklus

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接