Python 如何绘制具有多个数据帧的FacetGrid散点图?

Python 如何绘制具有多个数据帧的FacetGrid散点图?,python,pandas,seaborn,Python,Pandas,Seaborn,我有两个数据帧,一个有训练数据,另一个有标签。培训数据中有6个要素/列,标签数据框中有1列。我希望在我的刻面网格中有6个图-它们都是散点图。所以功能1和标签,功能2和标签,功能3和标签,功能4和标签 有人能告诉我怎么做吗 例如,使用这些示例数据帧 In [15]: training Out[15]: feature1 feature2 feature3 feature4 feature5 feature6 0 2 3 4

我有两个数据帧,一个有训练数据,另一个有标签。培训数据中有6个要素/列,标签数据框中有1列。我希望在我的刻面网格中有6个图-它们都是散点图。所以功能1和标签,功能2和标签,功能3和标签,功能4和标签

有人能告诉我怎么做吗

例如,使用这些示例数据帧

In [15]: training
Out[15]:
   feature1  feature2  feature3  feature4  feature5  feature6
0         2         3         4         5         2         5
1         5         4         2         5         6         2

In [16]: labels
Out[16]:
   label
0     34
1      2
这将生成6个单独的散点图,每个散点图有2个数据点。

Seaborn有一个很好的功能。您可以合并两个数据帧,将Seaborn FaceGrid包裹在普通的matplotlib.pyplot.scatter()周围


我喜欢你的答案,但在for-for-I范围(7)中可能存在一个小的技术错误。。。然后在“[random.random()表示范围(10)]内的i”中再次使用i。。。也许应该改成“j”或其他什么?我想如果你测试代码,你会发现它确实得到了随机生成的测试数据帧的预期结果;但是我同意双重使用I可能会有点困惑。啊..我猜你在使用Python 3?是的,Python版本2泄露了控制变量。参考:。。。我是在2.0版上运行的。没错,我是在3.X版上运行的。兼容性问题又出现了!我认为使用FacetGrid的目的是把一个轴的所有变量放在同一个尺度上。因此,您可以将col=“feature”交换为row=“feature”,您将获得一个不同的标签轴,但是这些特征将具有一个共享轴。如果您希望每个特征都位于不同的轴上,那么您可能只需要6个不同的绘图,而根本不需要FaceGrid。
import pandas as pd
import random
import matplotlib.pyplot as plt
import seaborn as sns

#make a test dataframe
features = {}
for i in range(7):
    features['feature%s'%i] = [random.random() for j in range(10)]
f = pd.DataFrame(features)
labels = pd.DataFrame({'label':[random.random() for j in range(10)]})

#unstack it so feature labels are now in a single column
unstacked = pd.DataFrame(f.unstack()).reset_index()
unstacked.columns = ['feature', 'feature_index', 'feature_value']
#merge them together to get the label value for each feature value
plot_data = pd.merge(unstacked, labels, left_on = 'feature_index', right_index = True)
#wrap a seaborn facetgrid
kws = dict(s=50, linewidth=.5, edgecolor="w")
g = sns.FacetGrid(plot_data, col="feature")
g = (g.map(plt.scatter, "feature_value", "label", **kws))