Как создать морской сценарий скрипки с отображением среднего, медианы и режима? - PullRequest
2 голосов
/ 28 мая 2020

Есть ли способ добавить к скрипичному сюжету среднее значение и режим? У меня есть категориальные данные в одном из моих столбцов и соответствующие значения в следующем столбце. Я попытался изучить график скрипки matplotlib, поскольку он технически предлагает функциональность, которую я ищу, но не позволяет мне указывать категориальную переменную на оси x, и это очень важно, поскольку я смотрю на распределение данных по категориям. Я добавил небольшую таблицу, иллюстрирующую форму данных.

plt.figure(figsize=10,15)
ax=sns.violinplot(x='category',y='value',data=df) 

enter image description here

1 Ответ

2 голосов
/ 28 мая 2020

Сначала мы вычисляем режим и означает:

import seaborn as sns
import pandas as pd
from matplotlib import pyplot as plt

df = pd.DataFrame({'Category':[1,2,5,1,2,4,3,4,2],
                   'Value':[1.5,1.2,2.2,2.6,2.3,2.7,5,3,0]})

Means = df.groupby('Category')['Value'].mean()
Modes = df.groupby('Category')['Value'].agg(lambda x: pd.Series.mode(x)[0])

Вы можете использовать seaborn, чтобы построить базовый график c, ниже я удаляю внутреннюю коробчатую диаграмму, используя аргумент inner=, чтобы мы может видеть режим и означает:

fig, ax = plt.subplots()
sns.violinplot(x='Category',y='Value',data=df,inner=None)
plt.setp(ax.collections, alpha=.3)
plt.scatter(x=range(len(Means)),y=Means,c="k")
plt.scatter(x=range(len(Modes)),y=Modes)

enter image description here

...