[英]How to plot a 'multiple-line' line graph in python
我有一個如下所示的數據框——
month source_id revenue
April PA0057 16001.0
PA0202 54063.0
PA0678 24219.0
PA0873 41827.0
August PA0057 40673.0
PA0202 75281.0
PA0678 60318.0
PA0873 55243.0
December PA0057 49781.0
PA0202 71797.0
PA0678 24975.0
PA0873 57630.0
February PA0057 13193.0
PA0202 44211.0
PA0678 29862.0
PA0873 36436.0
January PA0057 65707.0
PA0202 67384.0
PA0678 29392.0
PA0873 46854.0
July PA0057 31533.0
PA0202 49663.0
PA0678 10520.0
PA0873 53634.0
June PA0057 97229.0
PA0202 56115.0
PA0678 72770.0
PA0873 51260.0
March PA0057 44622.0
PA0202 54079.0
PA0678 36776.0
PA0873 42873.0
May PA0057 38077.0
PA0202 68103.0
PA0678 78012.0
PA0873 83464.0
November PA0057 26599.0
PA0202 53050.0
PA0678 87853.0
PA0873 65499.0
October PA0057 47638.0
PA0202 44445.0
PA0678 49983.0
PA0873 57926.0
September PA0057 46171.0
PA0202 49202.0
PA0678 42598.0
PA0873 65660.0
我想畫一條線圖,其中 x 軸是月份,y 軸是收入,我有 4 個 source_id-PA0057、PA0202、PA0678、PA0873,所以我想為每個源 ID 畫一條線
如何在折線圖上將其顯示為 4 條線?
我使用了以下
import matplotlib.pyplot as pls
my_df.plot(x='month', y='revenue', kind='line')
plt.show()
但它沒有給我預期的結果,因為我沒有輸入源 ID
pandas.DataFrame.groupby
看起來像pandas.DataFrame.groupby
的結果
df.groupby(['month', 'source_id']).agg({'revenue': sum})
pandas.Categorical
按順序設置'month'
列
calendar
模塊是標准庫的一部分,我們只是將它用於.month_name
的有序列表hue
參數的seabron.lineplot
繪制數據seabron.lineplot
。
seaborn
是matplotlib
的高級 API,可以使許多繪圖更容易。import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import calendar
# given some dataframe, perform groupby and reset the index
dfg = df.groupby(['month', 'source_id']).agg({'revenue': sum}).reset_index()
# display(dfg) - your dataframe should be in the following form
month source_id revenue
0 April PA0057 16001
1 April PA0202 54063
2 April PA0678 24219
3 April PA0873 41827
4 August PA0057 40673
# set the month column as categorical and set the order for calendar months
dfg.month = pd.Categorical(df.month, categories=list(calendar.month_name)[1:], ordered=True)
# plot with seaborn and use the hue parameter
plt.figure(figsize=(10, 6))
sns.lineplot(x='month', y='revenue', data=dfg, hue='source_id')
plt.legend(bbox_to_anchor=(1.05, 1), loc='upper left')
plt.xticks(rotation=90)
plt.show()
如果示例中的所有列都不是索引,則可以使用以下方法重塑 df
df = df.set_index(['month', 'source_id']).unstack()
這將為您提供一個新的數據框,其中month
為索引, source_id
為列。 然后你可以調用 plot 。
df.plot()
結果的行數與source_id
在數據中的行數一樣多。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.