【问题标题】:Draw outline round colorbars in sea born / matplotlib在 seaborn / matplotlib 中围绕颜色条绘制轮廓
【发布时间】:2016-03-14 17:54:23
【问题描述】:

使用 seaborn 热图后,我有几个颜色条作为轴实例,但不知道如何在生成的颜色条周围绘制黑色轮廓。

我可以使用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()

这会产生以下内容:

但是如何向颜色条添加相似的轮廓?

我可以直接修改 seaborn matrix.py 文件,但我希望有一个 matplotlib 路由。

【问题讨论】:

  • 你能加个MCVE吗?

标签: matplotlib seaborn colorbar


【解决方案1】:

我认为您要查找的命令是set_frame_on。来自matplotlib's 'axes' API

set_frame_on(b)

设置是否绘制坐标区矩形补丁

接受:[ 真 |假]

所以,添加到您的代码中

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

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

【讨论】:

  • 非常感谢,因为这是我的第一篇文章,恐怕我的票还不算数,但这解决了这个问题。我在 matplotlib 文档中完全忽略了这种方法。
  • @orgelzyklus 很高兴为您提供帮助。如果此答案解决了您的问题,您仍然可以将其标记为“已接受”(我认为您不需要为此获得声誉积分)。更多信息here
  • 再次感谢,我想我有。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-18
  • 2019-11-24
  • 2022-01-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多