我有 1994 年 1 月 1 日至 2000 年 4 月 30 日的每日資料。我有日期時間格式的日期,但是當我用 x 軸上的時間和 y 軸上的變數繪制線圖時,matplotlib 在 x 軸上列印的太多了。如何通過繪制日期解決此問題?
到目前為止,我已經這樣做了:
# get the proper dates
from datetime import timedelta, date
def daterange(date1, date2):
for n in range(int ((date2 - date1).days) 1):
yield date1 timedelta(n)
# jan 1st 1994 - april 30th 2000
start_dt = date(1994,1,1)
end_dt = date(2000,4,30)
dates = []
for dt in daterange(start_dt, end_dt):
dates.append(dt.strftime("%Y-%m-%d"))
#print(dt.shape)
dates = np.array(dates)
random = np.random.rand(dates.size)
plt.plot(dates,random)
plt.show()

我如何繪制日期以便您可以看到 xticks?
uj5u.com熱心網友回復:
讓我們從必要的匯入開始:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
首先要糾正的是您創建源資料的方式:
- 使用Pandas代替Numpy(雖然仍然需要一些Numpy方法)。
- 由于Pandas有它的原生日期/時間型別(datetime64),所以只使用它,而不是簡單的 pythoninc datetime。
- 將源資料創建為 pandasonic Series。
您可以通過以下方式實作:
np.random.seed(1) # To get repeatable results
dates = pd.date_range('1994-01-01', '2000-04-30')
s = pd.Series(np.random.rand(dates.size), index=dates)
然后是關于影像的評論:由于您有每日資料,您應該只列印每個第 n 個點,例如s[::20]. 否則影像將不可讀。
要獲取帶有日期的影像,您可以運行例如:
plt.plot(s[::20])
plt.xticks(rotation=30)
plt.gca().xaxis.set_minor_locator(mdates.MonthLocator(bymonth=[4,7,10]));
注意事項:
- 在這種情況下默認列印主要x刻度(年)。
- 我添加了呼叫set_minor_locator 的小 x刻度(四分之一)。
- 不需要旋轉x標簽,但我認為這是一個不錯的功能。如果您不同意,請
plt.xticks(rotation=30)從上面的代碼中洗掉。
對于上述源資料,我得到了以下影像:

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/389943.html
