在颜色条周围添加黑框

Add a black frame around a colorbar

我在两个单独的轴上创建了一个热图和一个颜色条。我想在每个地块周围创建一个黑框。我在 ax0(热图)上取得了成功,但对于 ax1(颜色条)它不起作用。见图:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

df = pd.DataFrame(np.random.randn(10, 2), columns=list('AB'))
fig, (ax0, ax1) = plt.subplots(ncols=2, figsize=(10, len(df) / 5.2), gridspec_kw={'width_ratios': [15, 15]})
sns.heatmap(df, annot=False, cmap='RdYlGn', cbar_ax=ax1, ax=ax0)
for _, spine in ax1.spines.items():
    spine.set_visible(True)
for _, spine in ax0.spines.items():
    spine.set_visible(True)

Seaborn默认设置颜色条的轮廓线宽为零1.

您可以为每个 ax 中的所有书脊设置线宽 (lw) 和边缘颜色,如下所示:

fig, (ax0, ax1) = plt.subplots(ncols=2)
sns.heatmap(df, annot=False, cmap="RdYlGn", cbar_ax=ax1, ax=ax0)

for spine in ax0.spines.values():
    spine.set_visible(True)
for spine in ax1.spines.values():
    spine.set(visible=True, lw=.8, edgecolor="black")

产生:

颜色条也有一个 outline 书脊,所以 ax1 只需这条线就可以完成。

ax1.spines["outline"].set(visible=True, lw=.8, edgecolor="black")