【问题标题】:How to plot Pandas multilabel data scatterplots in Seaborn using facetgrid?如何使用 facetgrid 在 Seaborn 中绘制 Pandas 多标签数据散点图?
【发布时间】:2017-12-03 04:59:26
【问题描述】:

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

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

目前我的 Pandas 数据框如下所示: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 参数成为一个列表,但这不起作用。

【问题讨论】:

标签: python pandas scatter-plot seaborn


【解决方案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])

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

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

【讨论】:

  • 有效!但是使用上面的代码,我复制了 x,y 数据以使不同的标签沿着列绘制。
  • 是的,但这不是您想要的吗?您的示例图由重复的 x,y 数据组成。我认为目标是用不同的色调并排创建完全相同的图,以指示每种方法中这些 (x,y) 坐标的预测集和真实集的不同标签。如果您仍然希望能够对原始数据进行分析,您始终可以通过 new_df = pd.concat([l1_df, l2_df]) 将连接的数据框设为新对象,这样您仍然可以使用 df
  • 正确。但是,对我来说,为了能够绘制多标签数据而必须为每个附加标签复制每个实例似乎是错误的。或者我对如何在 Pandas 中进行数据表示的理解有限?
猜你喜欢
  • 2018-02-01
  • 1970-01-01
  • 2016-11-09
  • 2019-09-26
  • 2018-11-09
  • 2018-12-09
  • 2015-06-17
  • 2021-02-20
  • 2020-09-26
相关资源
最近更新 更多