median = 3637
std = 1274.997414
perc_25 = 2627.0
perc_75 = 4238.0
У меня есть 4 значения, полученные из данных. Как я могу сделать из этого Boxplot? Я ожидаю линию, символизирующую медиану, прямоугольник, ограниченный 25-процентилем и 75-процентилем, и по одной точке с каждой стороны для медианы+стандартного и медианного-стандартного значения.
Обычно мне нужен список значений или фрейм данных, но я уже вычислил статистику, теперь я просто хочу ее отобразить.
Внутренне boxplot
вычисляет bxpstats
с помощью matplotlib.cbook.boxplot_stats
(источник ), затем передает результат в Axes.bxp ( источник).
bxpstats = cbook.boxplot_stats(x, whis=whis, bootstrap=bootstrap,
labels=labels, autorange=autorange)
...
artists = self.bxp(bxpstats, positions=positions, widths=widths,
vert=vert, patch_artist=patch_artist,
shownotches=notch, showmeans=showmeans,
showcaps=showcaps, showbox=showbox,
boxprops=boxprops, flierprops=flierprops,
medianprops=medianprops, meanprops=meanprops,
meanline=meanline, showfliers=showfliers,
capprops=capprops, whiskerprops=whiskerprops,
manage_ticks=manage_ticks, zorder=zorder,
capwidths=capwidths)
Вы можете сократить первые шаги, создав словарь в правильном формате:
import matplotlib.pyplot as plt
median = 3637
std = 1274.997414
perc_25 = 2627.0
perc_75 = 4238.0
bxpstats = [{'whishi': median+std,
'whislo': median-std,
'fliers': [],
'q1': perc_25,
'med': median,
'q3': perc_75}]
ax = plt.subplot()
ax.bxp(bxpstats)
Выход:
Если вам нужно несколько ящиков, добавьте в список больше словарей:
bxpstats = [{'whishi': 5, 'whislo': 1, 'fliers': [6], 'q1': 2, 'med': 3, 'q3': 4},
{'whishi': 5.5, 'whislo': 3, 'fliers': [2, 2.5, 5.7], 'q1': 4, 'med': 4.5, 'q3': 5}
]
ax = plt.subplot()
ax.bxp(bxpstats)
Чтобы дать вам полный список параметров:
import matplotlib
matplotlib.cbook.boxplot_stats([1, 2, 3, 100])
[{'mean': 26.5, # mean (shown if showmeans=True)
'iqr': 25.5, # q3-q1
'cilo': -17.517500000000002, # lower confidence interval (shown if shownotches=True)
'cihi': 22.517500000000002, # upper confidence interval (shown if shownotches=True)
'whishi': 27.25, # upper whisker
'whislo': 1, # lower whisker
'fliers': array([100]), # outliers
'q1': 1.75, # q1 (bottom of box)
'med': 2.5, # median (orange line)
'q3': 27.25}] # q3 (top of box)
Просто
plt.boxplot([median - std, perc_25, median, perc_75, median + std])
будет работать с этими 5 значениями. Илиsns.boxplot(y=[median - std, perc_25, median, perc_75, median + std])
.