Tengo los siguientes datos en python panda DataFrame. Me gustaría tener un diagtwig de caja agrupado similar a uno en https://stanford.edu/~mwaskom/software/seaborn/examples/grouped_boxplot.html
Para cada ID, me gustaría tener dos diagtwigs de caja trazados lado a lado. Cómo logro esto. Intenté trazarlo con el paquete marítimo pero sin ningún éxito.
id predicted real 1 [10, 10, 10] [16, 18, 20] 2 [12, 12, 15] [15, 17, 19, 21, 23] 3 [20, 5, 4, 4] [29, 32] 4 [25, 25, 25, 24, 21] [21, 24, 25, 26, 28, 29, 30, 33] 5 [20, 20, 20, 21] [21, 22, 24, 26, 28, 30, 31, 32] 6 [8, 3, 3, 14] [25, 27] 7 [1, 4, 4, 4, 5, 6, 10] [69, 71, 72] 8 [11, 11, 11, 11] [19, 21, 22, 23, 24] 9 [7, 6, 9, 9] [19, 26, 27, 28] 10 [30, 30, 30, 30, 30] [38, 39]
Observe la estructura de la tabla en el ejemplo que está mirando
import seaborn as sns tips = sns.load_dataset("tips") sns.boxplot(x="day", y="total_bill", hue="sex", data=tips, palette="PRGn") sns.despine(offset=10, trim=True)
tips.head()
Nuestro objective es configurar tu mesa como esta.
from StringIO import StringIO import pandas as pd text = """id predicted real 1 [10, 10, 10] [16, 18, 20] 2 [12, 12, 15] [15, 17, 19, 21, 23] 3 [20, 5, 4, 4] [29, 32] 4 [25, 25, 25, 24, 21] [21, 24, 25, 26, 28, 29, 30, 33] 5 [20, 20, 20, 21] [21, 22, 24, 26, 28, 30, 31, 32] 6 [8, 3, 3, 14] [25, 27] 7 [1, 4, 4, 4, 5, 6, 10] [69, 71, 72] 8 [11, 11, 11, 11] [19, 21, 22, 23, 24] 9 [7, 6, 9, 9] [19, 26, 27, 28] 10 [30, 30, 30, 30, 30] [38, 39]""" df = pd.read_csv(StringIO(text), sep='\s{2,}', engine='python', index_col=0) df = df.stack().str.strip('[]') \ .str.split(', ').unstack() df
df1 = df.stack().apply(pd.Series).stack().astype(int) \ .rename_axis(['id', 'reality', None]) \ .rename('value').reset_index(['id', 'reality']) \ .reset_index(drop=True) df1.head()
sns.boxplot(x='id', y='value', hue='reality', data=df1, palette='PRGn') sns.despine(offset=10, trim=True)