首页 > 解决方案 > 从 CSV 文件可视化财务数据

问题描述

我受到与我类似问题的上一篇文章的启发。我有一个 DataFrame,我想绘制一个带有 5 个不同图例的图表。但是,输出只有 1 个输出,与上一篇文章不同 - Pandas dataframe groupby plot

我可以知道是什么问题吗?

我的数据框是这样的:-

import pandas as pd
import import matplotlib.pyplot as plt

df1 = pd.read_csv('df_ratio_mac.csv')
df1 

    date        symbol  roe       roa
0   2019-12-31  FMC     21.2189   5.5051
1   2018-12-31  FMC     16.7456   5.3899
2   2017-12-31  FMC     -4.9167   -1.4457
3   2016-12-31  FMC     6.5580    2.1289
4   2015-12-31  FMC     -11.1408  -3.3608
15  2019-12-31  VMC     21.2189   5.5051
16  2018-12-31  VMC     16.7456   5.3899
17  2017-12-31  VMC     -4.9167   -1.4457
18  2016-12-31  VMC     6.5580    2.1289
19  2015-12-31  VMC     -11.1408  -3.3608
30  2019-12-31  APD     21.2189   5.5051
31  2018-12-31  APD     16.7456   5.3899
32  2017-12-31  APD     -4.9167   -1.4457
33  2016-12-31  APD     6.5580    2.1289
34  2015-12-31  APD     -11.1408  -3.3608
45  2019-12-31  MLM     21.2189   5.5051
46  2018-12-31  MLM     16.7456   5.3899
47  2017-12-31  MLM     -4.9167   -1.4457
48  2016-12-31  MLM     6.5580    2.1289
49  2015-12-31  MLM     -11.1408  -3.3608

fig, ax = plt.subplots(figsize=(20,4))
for key, grp in df1.groupby(['symbol']):
   ax.plot(grp['date'], grp['roe'], label=key)

ax.legend()
plt.show()

我的输出:

输出

标签: pandasdataframematplotlib

解决方案


为了绘制这样的东西,我通常更喜欢循环遍历数据框,而不是尝试将事物放入 group-by 或其他内容中。

例如(您的数据已经是长格式,因为这种方法更容易):

import matplotlib.pyplot as plt

fig, ax = plt.subplots(figsize=(3, 3))

for s in df["symbol"].unique():
    dp = df[df["symbol"] == s].copy()
    x = dp["date"]
    y = dp["roe"]
    ax.plot(x, y)

会给你:

在此处输入图像描述

(注意 - 我创建了新数据以便可以看到线条)

使用的数据:

          date symbol        roe     roa
0   2019-12-31    FMC   1.763938  5.5051
1   2018-12-31    FMC -11.131745  5.3899
2   2017-12-31    FMC  -4.476314 -1.4457
3   2016-12-31    FMC  -7.981688  2.1289
4   2015-12-31    FMC -14.543511 -3.3608
15  2019-12-31    VMC   3.866193  5.5051
16  2018-12-31    VMC   1.195928  5.3899
17  2017-12-31    VMC  12.469453 -1.4457
18  2016-12-31    VMC   4.784923  2.1289
19  2015-12-31    VMC  13.161288 -3.3608
30  2019-12-31    APD   1.288219  5.5051
31  2018-12-31    APD   3.476883  5.3899
32  2017-12-31    APD  -1.568422 -1.4457
33  2016-12-31    APD  -2.069321  2.1289
34  2015-12-31    APD  -4.012371 -3.3608
45  2019-12-31    MLM  -5.749301  5.5051
46  2018-12-31    MLM   1.204367  5.3899
47  2017-12-31    MLM   9.086242 -1.4457
48  2016-12-31    MLM  13.984092  2.1289
49  2015-12-31    MLM  -4.509655 -3.3608

推荐阅读