簡體   English   中英

我正在嘗試 plot 三行 matplotlib 但它顯示為一個

[英]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()

3 個地塊

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM