两个数据框的所有列的小提琴图,小提琴的每一侧都显示同一列,但来自另一个数据框

问题描述

我有两个分别为train_dftest_df的熊猫数据框。它们都有相同名称的列,而test_df仅具有train_df的一列。现在,我想绘制小提琴图,以显示该图的每一行中数据框的每一列的分布(如箱形图);小提琴的每一侧代表同一列,但来自不同的数据帧,以便比较两个数据帧中每一列的分布。我该如何做(最好是在matplotlib或seaborn中使用)?

编辑1:
类似于下面的图,但是我希望每个小提琴显示每个列的分布,并且希望小提琴的每个侧面显示每个数据帧中具有相同列的列的分布。除了该图像仅显示两列,并使用第三列作为颜色。

enter image description here

解决方法

您将必须将两个数据框组合在一起,并用一列设置每一行的原点:

# create fake data
tips = sns.load_dataset('tips')
train_df = tips.loc[tips['smoker']=='Yes']
test_df = tips.loc[tips['smoker']=='No']

# concatenate both dataframe
df = pd.concat([train_df.assign(orig='train'),test_df.assign(orig='test')],axis=0)

# plot
ax = sns.violinplot(x="day",y="total_bill",hue="orig",data=df,split=True)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...