我正在绘制4支球队的赛季vs终点位置,但是y轴是通过代码随机绘制的,而不是根据位置进行排序。有什么解决办法? 这是我的代码
Sample data:
Season Finish - df1
0 1950 4th
1 1951 3rd
2 1952 4th
3 1953 3rd
4 1954 3rd
Season Finish - df2
0 1950 4th
1 1951 2nd
2 1952 1st
3 1953 1st
4 1954 1st
Season Finish - df3
0 1950 1st
1 1951 1st
2 1952 1st
3 1953 1st
4 1954 1st
Season Finish - df4
0 1950 2nd
1 1951 5th
2 1952 8th
3 1953 6th
4 1954 5th
将熊猫作为pd导入, 将numpy导入为np, 将matplotlib导入为mpl, 导入matplotlib.pyplot作为plt,
df1 = pd.read_csv('Pistons.csv')
df2 = pd.read_csv('lions.csv')
df3 = pd.read_csv('red-wings.csv')
df4 = pd.read_csv('Tigers.csv')
df_list = [df1, df2, df3, df4]
for i in df_list:
# i['Season'] = i['NFL season']
i.rename(columns={i.columns[0]: "Season"}, inplace=True)
# print(df1['Season'])
# change name of to season
# for i in df_list:
# plt.plot(i.Season, i.Finish,)
plt.plot(df1.Season, df1.Finish, label="Pistons")
plt.plot(df2.Season, df2.Finish, label="Lions")
plt.plot(df3.Season, df3.Finish, label="Red Wings")
plt.plot(df4.Season, df4.Finish, label="Tigers")
plt.gca().invert_yaxis()
plt.title("Season vs Finish Position Graph", fontsize=17)
plt.xlabel('Season (Year)', fontsize=13)
plt.ylabel('Finish Position', fontsize=13)
plt.legend(loc=4, fontsize=10, frameon=False)
plt.show()
[Image of the output here][1].stack.imgur.com/POmXR.png
答案 0 :(得分:1)
想法是通过concat
用df1-df4
创建一个数据框,仅将Series.str.extract
的Finish
列转换为列表理解中的数字Season
DataFrame.set_index
。
最后的DataFrame.plot
图:
names = ['Pistons','Lions','Red Wings','Tigers']
df_list = [df1, df2, df3, df4]
new = [x.set_index('Season')['Finish'].str.extract('(\d+)', expand=False).astype(int)
for x in df_list]
df = pd.concat(new, axis=1, keys=names)
print (df)
Pistons Lions Red Wings Tigers
Season
1950 4 4 1 2
1951 3 2 1 5
1952 4 1 1 8
1953 3 1 1 6
1954 3 1 1 5
df.plot()
plt.gca().invert_yaxis()
plt.title("Season vs Finish Position Graph", fontsize=17)
plt.xlabel('Season (Year)', fontsize=13)
plt.ylabel('Finish Position', fontsize=13)
plt.legend(loc=4, fontsize=10, frameon=False)
plt.show()