簡體   English   中英

如何在python中繪制“多線”線圖

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

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.

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