在 seaborn / matplotlib 中围绕颜色图绘制轮廓
Draw outline round colorbars in sea born / matplotlib
使用 seaborn 热图后,我有几个颜色条作为轴实例,但不知道如何在结果颜色条周围绘制黑色轮廓。
我可以使用 axhline
和 axvline
来打开 x 轴和 y 轴,但是你如何绘制右边和顶部的书脊从而完成盒子。
我试过set_visible
、set_linewidth
、set_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 路由。
我认为您要查找的命令是 set_frame_on
。来自 matplotlib's 'axes' API:
set_frame_on(b)
Set whether the axes rectangle patch is drawn
ACCEPTS: [ True | False ]
所以,添加到您的代码中
cbar1ax.set_frame_on(True)
cbar2ax.set_frame_on(True)
以您想要的方式(如果我理解正确的话)为绘图中的每个颜色条添加一个框架。
使用 seaborn 热图后,我有几个颜色条作为轴实例,但不知道如何在结果颜色条周围绘制黑色轮廓。
我可以使用 axhline
和 axvline
来打开 x 轴和 y 轴,但是你如何绘制右边和顶部的书脊从而完成盒子。
我试过set_visible
、set_linewidth
、set_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 路由。
我认为您要查找的命令是 set_frame_on
。来自 matplotlib's 'axes' API:
set_frame_on(b)
Set whether the axes rectangle patch is drawn
ACCEPTS: [ True | False ]
所以,添加到您的代码中
cbar1ax.set_frame_on(True)
cbar2ax.set_frame_on(True)
以您想要的方式(如果我理解正确的话)为绘图中的每个颜色条添加一个框架。