Нарисуйте контур вокруг цветных полос в море рожденных / 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.

1 ответ

Решение

Я думаю, что команда, которую вы ищете set_frame_on, Из API 'axes' matplotlib:

set_frame_on (б)

Установите, будет ли нарисован прямоугольник с осями

ПРИНИМАЕТ: [ True | Ложь ]

Итак, добавляя в свой код

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

добавляет рамку к каждой из цветовых полос на вашем графике так, как вы хотите (если я правильно понял).

Другие вопросы по тегам