Как нарисовать relplot с boxplot тогда только частоты, указанные в seaborn - PullRequest
0 голосов
/ 12 сентября 2018

Пусть у нас есть такие данные:

import pandas as pd
import seaborn as sns
data = np.array([[5.2, 500, 1], [7.2, 450, 1],[6.2, 350, 1],[4.6, 400,1 ],[5.9, 212,1], [6.2, 350, 2],[4.6, 400,2 ],[5.9, 212,2]])
df = pd.DataFrame({'val':data[:,0],'size':data[:,1], 'time':data[:,2]})

enter image description here

val - фактическое среднее значение, рассчитанное по набору данных с размером, указанным вsize Столбец

График для рисования:

ax = sns.boxplot (x = 'time', y="val", data=df)
ax = sns.swarmplot(x = 'time', y="val", data=df, color=".25", size = df.size )

enter image description here

он будет нарисован явно без учета реального среднего значения - что должносумма val, деленная на сумму size для каждого time (почему все точки имеют одинаковый размер)

Рисование relplot помогает рисовать точки с нужным размером, но какНарисуйте там истинный коробочный сюжет:

ax = sns.relplot(x = 'time', y="val",  size="size",dashes = True,
            sizes=(40, 400), alpha=.5, palette="muted",
            height=6, data=df)

enter image description here

1 Ответ

0 голосов
/ 13 сентября 2018

У меня нет seaborn 0.9.0 для непосредственного тестирования, но из того, что я прочитал из документации sns.relplot(), возвращается FacetGrid, а sns.boxplot - это функция уровня осей (то есть она будет использовать любой экземпляр Axes, который вы выберете).Это означает, что вы должны быть в состоянии сделать что-то вроде этого:

g = sns.relplot(x = 'time', y="val", data=df, size="size")
ax = sns.boxplot (x = 'time', y="val", data=df, ax=g.axes[0,0])  # <- 
...