#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()