如何使用特定的列在海运中绘制多线图?

2022-02-27 00:00:00 python pandas dataframe plot seaborn

问题描述

我有一个更大的数据帧,类似于此格式:

df = pd.DataFrame([{'name': 'A', '2015': 99, '2016':98, '2017': '95', '2018':'99'}, {'name': 'B', '2015': 76, '2016':89, '2017': 83, '2018': 85}, {'name': 'C', '2015': 88, '2016':89, '2017': 91, '2018':91}])

df.set_index('name', inplace=True)

我只想绘制2016和2018年的多线图A、B和C。在搜索了一段时间之后,我似乎不知道如何从数据帧中绘制特定的列。最佳做法是为每个绘图创建一个新绘图吗?


解决方案

此处假设年份为字符串,值为整数。

Seborn需要整洁格式的数据,因此您可以首先转换数据帧。

import seaborn as sns
import pandas as pd


df = pd.DataFrame(
    [
        {"name": "A", "2015": 99, "2016": 98, "2017": 95, "2018": 99},
        {"name": "B", "2015": 76, "2016": 89, "2017": 83, "2018": 85},
        {"name": "C", "2015": 88, "2016": 89, "2017": 91, "2018": 91},
    ]
)

df.set_index("name", inplace=True)
tidy = df.stack().reset_index().rename(columns={"level_1": "year", 0: "values"})

以下是结果

    name    year    values
0   A   2015    99
1   A   2016    98
2   A   2017    95
3   A   2018    99
4   B   2015    76
5   B   2016    89
6   B   2017    83
7   B   2018    85
8   C   2015    88
9   C   2016    89
10  C   2017    91
11  C   2018    91

然后,您可以

  1. 为您想要的年份使用过滤
  2. 作为data参数传递
  3. 指定xyhue
  4. 处的列
sns.lineplot(
    data=tidy[tidy["year"].isin(["2016", "2018"])], x="year", y="values", hue="name"
)

结果

相关文章