我有 4 年的季節性資料,我想使用 matplotlib 在一張圖上繪制。
我的資料位于熊貓資料框中,如下所示:
Total Year Day
5 2017 10/29
4 2016 10/30
3 2018 10/31
5 2019 10/31
10 2017 10/31
在'Year'與'Day'列的型別str。該'Total'列是 type int。
我希望圖表有 4 條線:每年一條線。我想要'Total'在 Y 軸和'Day'X 軸上。我知道如何使用 GGplot 在 R 中做到這一點,但我無法在 Python 中使用 MatPlotLib 弄清楚。
uj5u.com熱心網友回復:
首先,您必須創建一個'Date'列:
df['Month'] = df['Day'].apply(lambda x: x.split('/')[0])
df['Day'] = df['Day'].apply(lambda x: x.split('/')[1])
df['Date'] = '2020' '-' df['Month'] '-' df['Day']
df['Date'] = pd.to_datetime(df['Date'])
請注意一個重要事實:您希望沿相同的 x 軸繪制不同的年份。為了達到這個結果,我需要報告同一參考年不同年份的資料。我選擇作為參考年2020是因為它是閏年(所以它包含所有可能的日期,Feb 29包括在內)。因此,該'Date'列將包含2020每個資料框行的確切日期和月份,但作為年份。
這僅用于繪圖目的。然后,您可以使用正確的格式 x 刻度屏蔽沿 x 軸的年份值。
最后,您可以回圈一年并繪制您的資料:
fig, ax = plt.subplots()
for year in df['Year'].unique():
filt = df['Year'] == year
ax.plot(df[filt]['Date'], df[filt]['Total'], label = year)
ax.xaxis.set_major_locator(md.DayLocator(interval = 15))
ax.xaxis.set_major_formatter(md.DateFormatter('%m/%d'))
plt.setp(ax.xaxis.get_majorticklabels(), rotation = 90)
ax.legend(frameon = True)
ax.set_xlabel('Date')
ax.set_ylabel('Total')
plt.show()
完整代碼
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.dates as md
df = pd.read_csv(r'data\data.csv')
df['Month'] = df['Day'].apply(lambda x: x.split('/')[0])
df['Day'] = df['Day'].apply(lambda x: x.split('/')[1])
df['Date'] = '2020' '-' df['Month'] '-' df['Day']
df['Date'] = pd.to_datetime(df['Date'])
fig, ax = plt.subplots()
for year in df['Year'].unique():
filt = df['Year'] == year
ax.plot(df[filt]['Date'], df[filt]['Total'], label = year)
ax.xaxis.set_major_locator(md.DayLocator(interval = 15))
ax.xaxis.set_major_formatter(md.DateFormatter('%m/%d'))
plt.setp(ax.xaxis.get_majorticklabels(), rotation = 90)
ax.legend(frameon = True)
ax.set_xlabel('Date')
ax.set_ylabel('Total')
plt.show()

轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/362636.html
標籤:Python 熊猫 约会时间 matplotlib 数据可视化
