Несколько цветов листовки в коробке

#python #matplotlib

Вопрос:

Я хочу установить несколько цветов листовки и создать легенду. Мой текущий код приведен ниже: Из выходных данных, которые дает этот код, например, я хочу, чтобы один из листовок на 2020 год был другого цвета. Кто-нибудь знает, как это сделать? Спасибо!

 import matplotlib.pyplot as plt

fig, ax = plt.subplots()
boxes = [
    {
        'label' : "2020",
        'whislo': 1.49,    # Bottom whisker position
        'q1'    : 9.36,    # First quartile (25th percentile)
        'med'   : 14.21,    # Median         (50th percentile)
        'q3'    : 18.73,    # Third quartile (75th percentile)
        'whishi': 54.76,    # Top whisker position
        'fliers': [10.7, 9.4]        # Outliers
    },
    {
        'label' : "2019",
        'whislo': 0.63,    # Bottom whisker position
        'q1'    : 6.11,    # First quartile (25th percentile)
        'med'   : 9.66,    # Median         (50th percentile)
        'q3'    : 15.33,    # Third quartile (75th percentile)
        'whishi': 23.89,    # Top whisker position
        'fliers': [2.8, 9.7]        # Outliers
    },
        {
        'label' : "2018",
        'whislo': -8.19,    # Bottom whisker position
        'q1'    : -0.15,    # First quartile (25th percentile)
        'med'   : 2.66,    # Median         (50th percentile)
        'q3'    : 7.85,    # Third quartile (75th percentile)
        'whishi': 13.25,    # Top whisker position
        'fliers': [8.6]        # Outliers
    },
            {
        'label' : "2017",
        'whislo': 3.51,    # Bottom whisker position
        'q1'    : 7.74,    # First quartile (25th percentile)
        'med'   : 10.91,    # Median         (50th percentile)
        'q3'    : 15.04,    # Third quartile (75th percentile)
        'whishi': 22.47,    # Top whisker position
        'fliers': [15.3]        # Outliers
    },
                {
        'label' : "2016",
        'whislo': -3.92,    # Bottom whisker position
        'q1'    : 0.05,    # First quartile (25th percentile)
        'med'   : 3.79,    # Median         (50th percentile)
        'q3'    : 7.60,    # Third quartile (75th percentile)
        'whishi': 14.65,    # Top whisker position
        'fliers': [0.4]        # Outliers
    }
]
ax.bxp(boxes, showfliers=True, flierprops={'markerfacecolor':'fuchsia', 'marker':'o'})

plt.ylim([-10,65])
plt.show()
 

Комментарии:

1. Спасибо! Это прекрасно работает для меня

2. Вы знаете, как добавить легенду для листовок?

Ответ №1:

Самый простой способ-просто нарисовать эту точку снова (используя 1 в качестве позиции x, которая является позицией x по умолчанию для первого поля). Например. ax.plot(1, 10.7, marker='o', markerfacecolor='lime') . Чтобы эта точка была отмечена в легенде, ax.plot(...., label=...) можно использовать.

Как и многие функции matplotlib, ax.bxp возвращает информацию о созданных графических элементах. В данном случае это словарь с записью 'fliers' , ведущей к списку. Каждая запись здесь снова представляет собой список пунктов, по одному списку на поле. Вы можете, например, использовать box_info['fliers'][0].set_color('turquoise') для изменения цвета всех листовок, принадлежащих первой коробке. Аналогично, .set_label(...) можно использовать для добавления записи в легенду.

 from matplotlib import pyplot as plt

fig, ax = plt.subplots()
box_info = ax.bxp(boxes, showfliers=True, flierprops={'markerfacecolor': 'fuchsia', 'marker': 'o'})
box_info['fliers'][-1].set_label('Outliers')
ax.plot(1, 10.7, marker='o', markerfacecolor='lime', linestyle='', label='Special outlier')
ax.legend()
ax.set_ylim([-10, 65])
plt.show()
 

бокс-карта со специальным выбросом и пользовательской легендой