来自 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 人口相比,西班牙裔人口相当少。因此,图表制作得相当宽。您可以只绘制一组并更好地看到起伏。
输出图
我想要一个图表,其中 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 人口相比,西班牙裔人口相当少。因此,图表制作得相当宽。您可以只绘制一组并更好地看到起伏。
输出图