2017-06-29 44 views
0

我有一个数据集有多个标签。我想用Pandas和Seaborn创建散点图的Facetgrid。此外,这个数据集有不同的来源,我也想比较。 (例如,这可以是不同ML算法的预测和并排的两个图中的真实标记)。我想情节是这样的有更多空间的方法和标号L:如何使用facetgrid在Seaborn中绘制Pandas multilabel数据散点图?

enter image description here

这里右列是第一个标签和左侧是第二个。

目前我的熊猫数据框看起来像这样:l1,l2,method,x,y。其中l1和l2是不同的标签。我可以使用以下代码绘制一列:

g = sns.FacetGrid(df, row='method', hue='l1') 
g.map(plt.scatter, 'x', 'y') 
sns.plt.show() 

但是,如何获得第二列?直观的做法是将hue参数设为列表,但不起作用。

+1

你也许想读的http:// VITA .had.co.nz/papers/tidy-data.html – mwaskom

回答

1

我想你需要修改你的数据帧:

l1_df = df[['l1','method','x','y']] 
l1_df['label_type'] = 'l1' 
l1_df.rename(columns={'l1':'label'}, inplace=True) 

l2_df = df[['l2','method','x','y']] 
l2_df['label_type'] = 'l2' 
l2_df.rename(columns={'l2':'label'}, inplace=True) 

df = pd.concat([l1_df,l2_df]) 

然后使用真正直观的选项,col,从docs

g = sns.FacetGrid(df, row='method', col='label_type', hue='label') 
g.map(plt.scatter, 'x', 'y') 
sns.plt.show() 
+0

作品!但是通过上面的代码,我复制了x,y数据,使不同的标签沿着列进行绘制。 –

+0

是的,但不是你想要的吗?您的示例图由复制的x,y数据组成。我认为目标是用不同的色调并排创建完全相同的图,表明每种方法中那些(x,y)坐标的预测和真集的不同标签。如果你想仍然能够对原始数据进行分析,你可以通过'new_df = pd.concat([l1_df,l2_df])''使得连接的数据框成为一个新的对象,这样你仍然可以使用'df'工作用。 – jack6e

+0

正确。然而,对我来说,为了能够绘制多标签数据,必须为每个附加标签重复每个实例似乎是错误的。或者,也许我对如何在熊猫中进行数据表示的理解有限? –

相关问题