示例数据:
table1
c1 c2
r1 1 3
r2 2 2
r3 3 1
table2
c1 c2
r1 4 6
r2 5 5
r3 6 4
table3
c1 c2
r1 7 9
r2 8 8
r3 9 7
我已经将数据传输到如下所示的数据框中,其中行是分析类别,上层列是被分析的个体,第二层是复制。
table1 table2 table3
r1 r2 r3 r1 r2 r3 r1 r2 r3
c1 1 2 3 4 5 6 7 8 9
c2 3 2 1 6 5 4 9 8 7
我想将其转换为点图,其中每个复制的平均值为点,其余值用于创建置信区间,并为每个表绘制一条线。换句话说,我希望值传递给pointplot为x=[table1,table2,table3], y=mean(all_r_values), hue=[c1, c2]
我不知道该怎么做,或者如何将我的桌子重塑成适合此的形式。
答案 0 :(得分:1)
Seaborn希望数据采用长(整洁)格式,您可以在the documentation中了解更多信息:
使用“tidy”格式的DataFrame调用这些函数是最简单也是最好的,尽管较低级别的函数也接受宽格式DataFrame或简单的观察向量。
实质上,这意味着您希望尽可能多地将信息包含在数据框的行中而不是列中。在您的情况下,您希望将数据转换为以下格式:
rep table c value
r1 table1 c1 1
r2 table1 c1 2
r3 table1 c1 3
...
我复制了您的示例数据并对其进行了轻微修改以获得此结果:
rep c1 c2 table
r1 1 3 table1
r2 2 2 table1
r3 3 1 table1
r1 4 6 table2
r2 5 5 table2
r3 6 4 table2
r1 7 9 table3
r2 8 8 table3
r3 9 7 table3
复制到剪贴板并通过
将其读入pandasimport pandas as pd
import seaborn as sns
df = pd.read_clipboard()
然后你可以"融化"将数据转换成长格式,并用Seaborn绘制:
df_long = df.melt(id_vars=['rep', 'table'], var_name='c')
sns.pointplot(x='table', y='value', hue='c', data=df_long, join=False, dodge=0.2)
从分层列格式中获取(并进入)格式相当混乱,但可以通过
完成# Get sample data into the hierarchical column format
df_long_temp = df.melt(id_vars=['rep', 'table'], value_vars=['c1', 'c2'], var_name='c')
df_multi_cols = df_long_temp.set_index(['table', 'rep', 'c']).unstack(level=[0,1])
# Reshape from hierarchical column to long-form data
df_long = df_multi_cols.stack(level=[1,2]).reset_index()
sns.pointplot(x='table', y='value', hue='c', data=df_long, join=False, dodge=0.2)