Добавить пользовательскую легенду на морские участки - PullRequest
0 голосов
/ 24 апреля 2020

Я использую seaborn для генерации N коробочных диаграмм из M методов, а затем я окрашиваю коробочные диаграммы для каждого метода одним цветом. Теперь я хочу добавить только легенду, которая отображает имена методов M в разных цветах (например, метод red_line A, метод blue_line B и т. Д.). Есть ли быстрый способ сделать это?

bplot = sns.boxplot(data=[d for d in data])   
colors = ["red", "green", "blue"]    
color_counter = 0
for i in range(len(data)-len(c)): 
    mybox = bplot.artists[i]
    mybox.set_facecolor(colors[color_counter])
    color_counter = color_counter + 1
    if color_counter == len(methods): 
        color_counter=0   
# COMMENTING NEXT CODE BLOCK AS IT OUTPUTS TEXT ASSOCIATED TO GRAY LINES (I want them to be colored instead) 
# leg = plt.legend(labels=[method for method in methods])
# for legobj in leg.legendHandles:
#     legobj.set_linewidth(12.0)
# params = {'legend.fontsize': 80}
# plt.rcParams.update(params)
plt.legend()  
plt.title('Title')
plt.show()

1 Ответ

1 голос
/ 24 апреля 2020

Matplotlib позволяет создавать собственные легенды, в основном с тем, что вы хотите там.

См. https://matplotlib.org/3.2.1/gallery/text_labels_and_annotations/custom_legends.html

Для вашего случая вы бы создали что-то вроде

from matplotlib.lines import Line2D
import matplotlib.pyplot as plt

legend_elements = [Line2D([0], [0], color='red', lw=4, label='Method 1'),
Line2D([0], [0], color='green', lw=4, label='Method 2'),
Line2D([0], [0], color='blue', lw=4, label='Method 3')]

# Create the figure
fig, ax = plt.subplots()
ax.legend(handles=legend_elements, loc='center')

plt.show()

...