[英]I am trying to plot three lines with matplotlib but it is showing up as one
我有一個 DF,我正在使用 plot 玩家在給定小時內擁有多少用戶日志。 我想看看他們一天中什么時候最活躍。
username hour freq
0 Player 1 0 74
1 Player 1 1 37
2 Player 1 2 6
3 Player 2 3 152
4 Player 2 5 90
5 Player 2 6 57
6 Player 3 7 219
7 Player 3 8 443
8 Player 3 9 557
然后我使用那個 DF 並嘗試 plot 像這樣:
plt.rcParams['figure.figsize'] = 10,5
for name in playername:
playertimes = new_df[new_df.username.isin([name])]
plt.plot(playertimes['freq'], c='Black', ls='--', marker = 's', ms=7, label = name)
plt.legend(loc='upper left', bbox_to_anchor=(1,1))
plt.xticks(list(range(0,24)), new_df['hour'], rotation = 'vertical')
plt.show()
我的邏輯是我將使用 playertimes df 作為臨時 df,所以我可以 plot 僅每個玩家的頻率。
我希望每個玩家都有一條線,但我得到的是:
我試着弄亂了一些東西,但似乎無法讓它發揮作用。 有任何想法嗎?
用戶列表必須是 go 到 dataframe 的唯一一次,並且 dataframe 應該按預期按“小時”排序以顯示結果。 為了在 x 軸上顯示正確的值,您只需要在 x 軸上實際 plot 那些值。 下面的代碼包括所有這些更改:
plt.rcParams['figure.figsize'] = 10,5
linestyles = ['-', '--', ':']
markers = ['s', 'o', 'v']
for i, name in enumerate(df.username.unique()):
playertimes = df[df.username.isin([name])].sort_values('hour')
plt.plot(playertimes['hour'], playertimes['freq'], c='Black',
ls=linestyles[i], marker =markers[i], ms=7, label = name)
plt.legend(loc='upper left', bbox_to_anchor=(1,1))
plt.xticks(range(0,24), rotation = 'vertical')
plt.show()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.