Добавление закрашенных фигур в цветовую панель не является частью стандартного интерфейса. Однако легенда может служить вашим целям. Некоторые формы поддерживаются легендой, другие нуждаются в специальном обработчике, как описано в этом посте .
Кажется, сначала нужно создать несколько кругов, для которых цвет et c , можно установить. Чтобы сказать обработчику, какая именно форма подразумевается, я неправильно использую параметр label. Из источника биокита corrplot
мы узнаем, что эллипс вращается либо +
, либо -45°
, и что он масштабируется по абсолютной величине корреляции.
Следующий код собирает все вместе. Цветовая шкала рисуется как ссылка, но может быть опущена после того, как все проверено. Легенда расположена вне основного сюжета через bbox_to_anchor=(x, y)
. Эти координаты находятся в координатах осей . Идеальное расположение зависит от размера других элементов, поэтому некоторые эксперименты могут быть полезны. Я не нарисовал сам corrplot
, так как он не установлен, но вы можете заменить им фиктивный график рассеяния.
import matplotlib.pyplot as plt
from matplotlib.patches import Ellipse, Circle
import matplotlib as mpl
class HandlerEllipse(mpl.legend_handler.HandlerPatch):
def create_artists(self, legend, orig_handle,
xdescent, ydescent, width, height, fontsize, trans):
d = float(orig_handle.get_label())
center = 0.5 * width - 0.5 * xdescent, 0.5 * height - 0.5 * ydescent
radius = (height + ydescent) * 1.8
p = Ellipse(xy=center, width=radius, height=radius * (1 - abs(d)), angle=45 if d > 0 else -45)
self.update_prop(p, orig_handle, legend)
p.set_transform(trans)
return [p]
#values = [1, 0.5, 0, -0.5, -1]
values = [1, 0.75, 0.5, 0.25, 0, -0.25, -0.5, -0.75, -1]
cmap = plt.cm.Oranges # or plt.cm.PiYG
norm = mpl.colors.Normalize(vmin=-1, vmax=1)
fig, ax = plt.subplots()
plt.scatter([0,1], [0,1], c=[-1,1], cmap=cmap, norm=norm) # a dummy plot as a stand-in for the corrplot
char = plt.colorbar(ticks=values)
shapes = [Circle((0.5, 0.5), 1, facecolor=cmap(norm(d)), edgecolor='k', alpha=1, zorder=2, linewidth=1, label=d)
for d in values]
plt.legend(handles=shapes, labels=values, title='Correlation', framealpha=1,
bbox_to_anchor=(1.25, 1), loc='upper left',
handler_map={Circle: HandlerEllipse()})
plt.tight_layout() # make sure legend and colorbar fit nicely in the plot
plt.show()
![resulting legend](https://i.stack.imgur.com/hd62I.png)