簡體   English   中英

如何在 Python Matplotlib 中的同一 x 軸上 plot 具有不同開始日期的多個時間序列數據?

[英]How to plot multiple timeseries data with different start date on the same x-axis in Python Matplotlib?

我正在嘗試 plot 在同一 x 軸上具有不同開始日期的三個時間序列數據集,類似於這個問題How to plot timeseries with different start date on the same x axis 除了我的 x 軸有日期而不是天數。

我的數據框結構如下:

日期 ColA Label
01/01/2019 1.0 培訓
02/01/2019 1.0 培訓
...
14/09/2020 2.0 測試1
..
06/01/2021 4.0 測試2
...

我將每個時間序列定義為:

train = df.loc['01/01/2019':'05/08/2020', 'ColA']  
test1 = df.loc['14/09/2020':'20/12/2020', 'ColA']  
test2 = df.loc['06/01/2021':'18/03/2021', 'ColA']  

這就是單個時間序列 plot 的方式: 數據1 數據2 數據3

但是當我嘗試 plot 它們在同一個 x 軸上時,它不會按日期順序 plot 數據全部 我希望產生這樣的東西(來自 MS Excel): 在此處輸入圖像描述

任何幫助都會很棒!

謝謝

確保 dataframe 中的“日期”列作為日期時間變量而不是字符串導入。

如果您發現 dtype 為“對象”:

df = pd.read_csv('data.csv')
data['Date']
0      2019-01-01
1      2019-01-02
2      2019-01-03
       

    Name: Date, Length: 830, dtype: object

您需要轉換為 datetime 變量。 您可以通過兩種方式進行轉換:

  1.  df = pd.read_csv('data.csv', parse_dates=['Date'])

或者

  1. df = pd.read_csv('data.csv') df['Date'] = pd.to_datetime(data['Date'])

這兩個選項都會給你相同的結果。

df = pd.read_csv('data.csv', parse_dates=['Date'])
data['Date']
0      2019-01-01
1      2019-01-02
2      2019-01-03
       ...

    Name: Date, Length: 830, dtype: datetime64[ns]

然后,您可以只使用 plot:

plt.plot(data['Date'],ColA)

當您定義單個時間序列時,請務必檢查日期格式。 pandas 中的日期時間格式為 YYYY-MM-DD。 所以,改用這個:

train = df.loc['2019-01-01':'2020-08-05', 'ColA'] and so on...

我假設您的數據存儲為 csv (或 excel)。 如果是這樣,當您在 Excel 中打開數據文件時,請注意 MS Excel 可能如何更改日期列的格式。 最佳做法是始終使用檢查“日期”列的格式

type(data['Date']) after importing dataframe.

我假設你有一個 dataframe 至少包含daterecordlabel的訓練、測試 #1 和 test#2
sharex = True能解決問題嗎?

fig, ax = plt.subplots(3,1, sharex = True)

for i,j in zip(data['label'].unique(), range(3)):
    ax[j].plot(x = df[df['label'] == i]['date'], 
               y = df[df['label'] == i]['record'])

編輯

這應該這樣做

fig, ax = plt.subplots(figsize = (14,6))
color = ['blue','red','orange']

for i,j in zip(df.Label.unique().tolist(), color):
    ax.plot(x = df['Date'][df.Label == i], y = df['ColA'][df.Label == i], 
            color = j, label = j)
plt.legend(loc = 'best')
plt.show()

您基本上想在 matplotlib 的同一圖中多次 plot 。 只需使用初始數據集(包括所有標簽),無需使用分離的數據集。

暫無
暫無

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

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