来自 groupby 的特定数据帧上的 Matplotlib 图形

Matplotlib graphic on a particular dataframe from groupby

我想要一个图表,其中 x 轴表示 TOT 人口,y 轴表示年份,两条线一条表示西班牙裔,另一条表示非西班牙裔。数据框是:

                                  ID Race   ID Ethnicity    ID Year Hispanic Population Moe
Ethnicity          TOT Population               
Hispanic or Latino  9825          4.0           1.0          2013.0         2345.0
                    12234         4.0           1.0          2014.0         2660.0
                    12437         4.0           1.0          2018.0         2429.0
                    13502         4.0           1.0          2016.0         3254.0
                    14025         4.0           1.0          2019.0         2644.0
... ... ... ... ... ...
Not Hispanic or Latino  
                    14616636      0.0           0.0          2017.0         7788.0
                    14725729      0.0           0.0          2016.0         8629.0
                    14815122      0.0           0.0          2015.0         7888.0
                    14849129      0.0           0.0          2014.0         7495.0
                    14884539      0.0           0.0          2013.0         6586.0

我从种族和 TOT 人口的分组中得到了这个数据框。有人可以帮助我制作真正的 matplotlib 吗?谢谢!

我认为您的问题分为两个部分。首先是将分组数据移动到 maatplotlib 可以理解的格式(基本上压平 table),然后在一张图中绘制(线)两条线。

初始数据:

>> df
                                     ID Race    ID Ethnicity    ID Year  Hispanic...
Ethnicity          TOT Population               
Hispanic or Latino           9825       4               1        2013       2345
                             12234      4               1        2014       2660
                             12437      4               1        2018       2429
                             13502      4               1        2016       3254
                             14025      4               1        2019       2644
Not Hispanic or Latino      14616636    0               0        2017       7788
                            14725729    0               0        2016       8629
                            14815122    0               0        2015       7888
                            14849129    0               0        2014       7495
                            14884539    0               0        2013       6586

首先,使用reset_index来压平table

>> df2 = df.reset_index()
>> df2
   Ethnicity    TOT Population  ID Race ID Ethnicity    ID Year Hispanic Population Moe
0   Hispanic or Latino  9825    4   1   2013    2345
1   Hispanic or Latino  12234   4   1   2014    2660
2   Hispanic or Latino  12437   4   1   2018    2429
3   Hispanic or Latino  13502   4   1   2016    3254
4   Hispanic or Latino  14025   4   1   2019    2644
5   Not Hispanic or Latino  14616636    0   0   2017    7788
6   Not Hispanic or Latino  14725729    0   0   2016    8629
7   Not Hispanic or Latino  14815122    0   0   2015    7888
8   Not Hispanic or Latino  14849129    0   0   2014    7495
9   Not Hispanic or Latino  14884539    0   0   2013    6586

然后绘制折线图。

import matplotlib.pyplot as plt
plt.figure(figsize=(20, 5))

plt.plot(df2['TOT Population'][df2['Ethnicity'] == 'Hispanic or Latino'], df2['ID Year'][df2['Ethnicity'] == 'Hispanic or Latino'])
plt.plot(df2['TOT Population'][df2['Ethnicity'] == 'Not Hispanic or Latino'], df2['ID Year'][df2['Ethnicity'] == 'Not Hispanic or Latino'], '-.')
plt.ticklabel_format(style='plain')
plt.xlabel("TOT Population")
plt.ylabel("Year")
plt.title('My plot')

您的图表将如下所示。您可以根据需要进一步更改它。请注意,与 non-hispanic 人口相比,西班牙裔人口相当少。因此,图表制作得相当宽。您可以只绘制一组并更好地看到起伏。

输出图