【问题标题】:How to plot a FacetGrid scatter plot with multiple data frames?如何绘制具有多个数据框的 FacetGrid 散点图?
【发布时间】:2016-03-03 02:21:38
【问题描述】:

我有 2 个数据框,1 个有训练数据,另一个有标签。训练数据中有 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 个数据点。

【问题讨论】:

    标签: python pandas seaborn


    【解决方案1】:

    Seaborn 有一个不错的 FacetGrid 函数。您可以合并两个数据框,将 seaborn facetgrid 包裹在一个普通的 matplotlib.pyplot.scatter() 周围

    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))
    

    【讨论】:

    • 我喜欢你的回答,但在 for 循环中可能存在一个小的技术错误 - for i in range(7) ... 然后 i 在 "[random.random() for i 中再次使用in range(10)]" ...也许应该改成“j”之类的?
    • 我想你会发现,如果你测试代码,它确实会产生随机生成的测试数据帧的预期结果;但我同意 i 的双重使用可能会有点混乱。
    • 啊..我猜你正在使用 Python 3?是的,Python 版本 2 泄漏了控制变量。参考:stackoverflow.com/a/4199355/904032 ...我在版本 2 上运行它。
    • 真的,我在 3.X。兼容性问题再次抬头!
    • 嗯,我认为使用 FacetGrid 的目的是把一个轴的所有变量放在同一个刻度上。所以你可以把 c​​ol="feature" 换成 row="feature",你会得到一个不同的标签轴,但是这些特征会有一个共享轴。如果您希望每个功能都在不同的轴上,您可能只需要 6 个不同的图而不是 facetgrid。
    猜你喜欢
    • 2017-12-03
    • 2015-01-09
    • 2015-10-01
    • 2020-01-24
    • 2017-09-23
    • 1970-01-01
    • 2020-02-25
    • 2017-08-21
    • 2014-04-18
    相关资源
    最近更新 更多