生成一系列带有pandas数据帧的图

时间:2018-01-20 15:43:03

标签: python pandas dataframe scatter-plot

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

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

首先进行导入。

import pandas as pd

创建一个pandas数据帧。

 # 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轴和x轴上的coverage_id(字符串)中。

我想我应该从:

开始
df.groupby('name')

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

这样我就可以按名称对数据框进行分组。我不知道如何继续并让Python为我制作两个图。

非常感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

我认为您可以使用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.pairplot的另一个seaborn解决方案:

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