Есть ли способ заменить вспомогательный сюжет matplotlib легендой (вместо того, чтобы иметь легенду за пределами вспомогательных сюжетов)? - PullRequest
1 голос
/ 02 апреля 2020

У меня есть фигура с 11 точками рассеяния в качестве вспомогательных участков. Я бы хотел, чтобы легенда (одинаковая для всех 11 сюжетов) заменила 12-й. Есть ли способ поместить легенду туда и иметь такой же размер, что и на вспомогательных участках?

Диаграмма рассеяния Matplotlib из 11 вспомогательных участков

1 Ответ

0 голосов
/ 02 апреля 2020

Вроде ручного подхода, но вот оно:

Вы можете «удалить» ось, используя ax.clear() и ax.set_axis_off(). Затем вы можете создавать патчи с указанными c цветами и метками, а также создавать легенду в желаемом топоре на их основе.

Попробуйте это:

import matplotlib.pyplot as plt
import matplotlib.patches as mpatches
import numpy as np

# Create figure with subplots
fig, axes = plt.subplots(figsize=(16, 16), ncols=4, nrows=3, sharex=True, sharey=True)

# Plot some random data
for row in axes: 
    for ax in row: 
        ax.scatter(np.random.random(5), np.random.random(5), color='green') 
        ax.scatter(np.random.random(2), np.random.random(2), color='red')
        ax.scatter(np.random.random(3), np.random.random(3), color='orange') 
        ax.set_title('some title')

# Clear bottom-right ax
bottom_right_ax = axes[-1][-1] 
bottom_right_ax.clear()  # clears the random data I plotted previously
bottom_right_ax.set_axis_off()  # removes the XY axes

# Manually create legend handles (patches)
red_patch = mpatches.Patch(color='red', label='Red data')
green_patch = mpatches.Patch(color='green', label='Green data')
orange_patch = mpatches.Patch(color='orange', label='Orange data')

# Add legend to bottom-right ax
bottom_right_ax.legend(handles=[red_patch, green_patch, orange_patch], loc='center')

# Show figure
plt.show()

Вывод:

enter image description here

...