在 Matplotlib 中繪製日期
時間序列圖使用自迴歸綜合移動平均值等統計方法傳達屬性值如何隨時間變化。
我們可以根據其產品先前銷售的歷史時間序列資料可靠地預測或預測特定零售產品的需求。
本文將演示如何使用 matplotlib.dates
和一些使用內建 Python 模組的日期的基本示例,然後我們將看到一個使用 CSV 檔案中的資料在 Matplotlib 中繪製日期的示例。
在 Matplotlib 中使用 matplotlib.dates
繪製日期
我們將在 Matplotlib 中檢視時間序列資料並繪製日期。大量資料包含日期資訊,因此在建立一些圖表時知道如何繪製日期將是一個巨大的幫助。
首先,我們將通過 datetime
模組使用一些日期來完成一些基本示例。所以,我們需要匯入一些庫。
from matplotlib import pyplot as plot
# A matplotlib date tool
import matplotlib.dates as mpl_dates
from datetime import datetime, timedelta
我們在這裡有一個包含七個日期的示例資料列表,我們正在使用 Python 的內建 datetime
模組來建立這些日期。
這是連續 7 天,然後在下面,我們的 y 軸有一個 y1
變數。
# A list of dates for seven dates
dates = [
datetime(2021, 10, 10),
datetime(2021, 10, 11),
datetime(2021, 10, 12),
datetime(2021, 10, 13),
datetime(2021, 10, 14),
datetime(2021, 10, 15),
datetime(2021, 10, 16),
]
# A data list
y1 = [1, 10, 3, 2, 5, 16, 7]
plot_date()
方法有助於繪製日期,因此我們呼叫此方法並傳遞一個 dates
引數作為 x 軸,將 y1
引數作為 y 軸。
這個繪圖不是預設的,而是由一條線連線的標記,但我們可以使用 linestyle
引數快速修復它。我們希望這個圖的線條樣式是實心的。
plot.plot_date(dates, y1, linestyle="solid")
要從 Pyplot 中獲取當前圖形,我們可以使用獲取當前圖形的 gca()
方法。然後我們可以在該圖上執行 autofmt_xdate()
。
我們有不同的方式來格式化我們的圖,讓它看起來不錯;我們可以使用 autofmt_xdate()
來格式化我們圖形上的日期。這將旋轉我們的日期以更好地適應並更改對齊方式。
plot.gcf().autofmt_xdate()
讓我們看看如何更改日期的格式。
假設,我們希望它們以月、日和年開頭,而不是如何顯示年-月-日。為此,我們必須使用一些日期時間格式。
為此,我們將 matplotlib.dates
匯入為 mpl_dates
,並從該匯入的模組中使用 DateFormatter
類。現在在這個類中,我們傳遞我們的格式字串。
月份的縮寫名稱是%b
,日期是%d
,年份是%Y
。我們需要將其設定為 x 軸的格式。
就像我們抓取圖形來執行 autofmt_xdate()
方法一樣,我們需要抓取軸來執行該方法。這與獲取當前圖形很相似,所以要獲取當前軸,我們將呼叫 gca()
方法來獲取當前軸。
現在,我們可以使用 xaxis.set_major_formatter()
格式化 x 軸,並傳遞儲存格式化日期的 date_format
。
date_format = mpl_dates.DateFormatter("%b, %d %Y")
# Get the access of current figure
plot.gca().xaxis.set_major_formatter(date_format)
tight_layout()
方法為我們的繪圖新增了填充。
plot.tight_layout()
完整的示例程式碼:
from matplotlib import pyplot as plot
# A matplotlib date tool
import matplotlib.dates as mpl_dates
from datetime import datetime, timedelta
# A list of dates for seven dates
dates = [
datetime(2021, 10, 10),
datetime(2021, 10, 11),
datetime(2021, 10, 12),
datetime(2021, 10, 13),
datetime(2021, 10, 14),
datetime(2021, 10, 15),
datetime(2021, 10, 16),
]
# A data list
y1 = [1, 10, 3, 2, 5, 16, 7]
plot.plot_date(dates, y1, linestyle="solid")
date_format = mpl_dates.DateFormatter("%b, %d %Y")
# Get the access of current figure
plot.gcf().autofmt_xdate()
# Get the access of current figure
plot.gca().xaxis.set_major_formatter(date_format)
# Make responsive
plot.tight_layout()
plot.show()
輸出:
在 Matplotlib 中使用 CSV 檔案中的資料繪製日期
本節將提供一個使用 CSV 檔案中的資料的示例。CSV 檔案中的資料是幾周內的比特幣價格。
首先,我們需要匯入 Pandas。
import pandas as pd
我們讀取資料以將其載入為 Pandas 資料框並上傳 CSV 檔案,因此我們的目錄中有 data.sv
檔案。我們可以使用 read_csv()
方法上傳它,這是一個 CSV 檔案閱讀器。
data = pd.read_csv("data.csv")
我們必須將 Date
列轉換為日期時間,因此我們需要使用 Pandas 的 to_datetime()
方法。然後,我們將所有字串值替換為轉換後的日期時間。
在下面的程式碼行中,我們使用 sort_values()
方法對資料進行排序並傳遞 inplace=True
,這將修改已排序列的資料。
每當 price_date
等於資料然後傳入 Date
的那個鍵時,它會將 price_date equal
設定為我們資料中與該日期列等效的所有這些日期。
現在,我們將對 price_close
變數做同樣的事情,並將其設定為 Close
以獲取那些日子的所有收盤價,因此我們有價格日期,以及從 CSV 檔案載入的價格收盤資料。
data["Date"] = pd.to_datetime(data["Date"])
data.sort_values("Date", inplace=True)
price_date = data["Date"]
price_close = data["Close"]
為了繪製它,我們將資料傳遞給 plot_date()
方法。我們將 price_date
作為 x 值傳遞,將 price_close
作為 y 值傳遞。
plot.plot_date(price_date, price_close, linestyle="solid")
完整的示例程式碼:
from matplotlib import pyplot as plot
# A matplotlib date tool
import matplotlib.dates as mpl_dates
from datetime import datetime, timedelta
import pandas as pd
data = pd.read_csv("data.csv")
data["Date"] = pd.to_datetime(data["Date"])
data.sort_values("Date", inplace=True)
price_date = data["Date"]
price_close = data["Close"]
plot.plot_date(price_date, price_close, linestyle="solid")
date_format = mpl_dates.DateFormatter("%b, %d %Y")
# Get the access of current figure
plot.gcf().autofmt_xdate()
# Get the access of current figure
plot.gca().xaxis.set_major_formatter(date_format)
plot.title("Bitcoin Prices")
plot.xlabel("Date")
plot.ylabel("Closing Price")
# Make responsive
plot.tight_layout()
plot.show()
輸出:
Hello! I am Salman Bin Mehmood(Baum), a software developer and I help organizations, address complex problems. My expertise lies within back-end, data science and machine learning. I am a lifelong learner, currently working on metaverse, and enrolled in a course building an AI application with python. I love solving problems and developing bug-free software for people. I write content related to python and hot Technologies.
LinkedIn