【问题标题】:generate series of plots with pandas dataframe使用 pandas 数据框生成一系列图
【发布时间】:2018-01-21 00:49:24
【问题描述】:

我必须生成一系列散点图(总共大约 100 个)。

我创建了一个示例来说明问题。

首先进行导入。

import pandas as pd

创建一个熊猫数据框。

 # Create dataframe
data = {'name': ['Jason', 'Jason', 'Tina', 'Tina', 'Tina', 'Jason', 'Tina'],
        'report_value': [4, 24, 31, 2, 3, 5, 10],
        'coverage_id': ['m1', 'm2', 'm3', 'm4', 'm5', 'm6', 'm7']}
df = pd.DataFrame(data)
print(df)

输出:

  coverage_id   name  report_value
0          m1  Jason             4
1          m2  Jason            24
2          m3   Tina            31
3          m4   Tina             2
4          m5   Tina             3
5          m6  Jason             5
6          m7   Tina            10

目标是在不使用 for 循环的情况下生成两个散点图。人名 Jason 或 Tina 应显示在标题中。 report_value 应该在两个图中的 y 轴上,coverage_id(它是一个字符串)在 x 轴上。

我想我应该从:

df.groupby('name')

然后我需要将操作应用于每个组。

这样我就有了按名称分组的数据框。我不知道如何继续并让 Python 为我制作这两个图。

非常感谢您的帮助。

【问题讨论】:

    标签: python pandas dataframe scatter-plot


    【解决方案1】:

    我认为您可以使用this solution,但首先需要将string 列转换为数字,plot 和最后设置xlabels

    import matplotlib.pyplot as plt
    
    u, i = np.unique(df.coverage_id, return_inverse=True)
    df.coverage_id = i
    
    groups = df.groupby('name')
    
    # Plot
    fig, ax = plt.subplots()
    ax.margins(0.05) # Optional, just adds 5% padding to the autoscaling
    for name, group in groups:
        ax.plot(group.coverage_id, 
                group.report_value, 
                marker='o', 
                linestyle='', 
                ms=12, 
                label=name)
    
    ax.set(xticks=range(len(i)), xticklabels=u)
    ax.legend()
    
    plt.show()
    

    另一个seaborn 解决方案seaborn.pairplot

    import seaborn as sns
    
    u, i = np.unique(df.coverage_id, return_inverse=True)
    df.coverage_id = i
    
    g=sns.pairplot(x_vars=["coverage_id"], y_vars=["report_value"], data=df, hue="name", size=5)
    g.set(xticklabels=u, xlim=(0, None))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-07
      • 2018-12-05
      相关资源
      最近更新 更多