我發現一種方法來畫一條線在一個matplotlib情節(不是必需的垂直或水平):This建議使用添加的任意直線與X軸的日期時間一matplotlib情節
plt.plot([2, 3], [25, 10])
然而該不能與日期時間在x軸上的繪圖一起使用。
我得到「ValueError:ordinal必須> = 1」,並在下面的代碼中進行了所有嘗試。
import matplotlib.pyplot as plt
from calendar import monthrange
import datetime
def get_datetime_range(year, month): # Create a list with all days in a month
nb_days = monthrange(year, month)[1]
return [datetime.date(year, month, day) for day in range(1, nb_days+1)]
# Create sample data
date = get_datetime_range(2017, 9)
value = [d.day % 12 for d in date]
# Draw
plt.plot(date, value)
plt.axvline(date[10], color='r', zorder=0) # Vertical line works
m = len(date)-1
print("Draw line from [%s, %s] to [%s, %s]." % (date[0], value[0], date[m], value[m]))
# The following does NOT work
plt.plot_date([date[0], value[0]],
[date[m], value[m]]) # Gives ValueError: ordinal must be >= 1
#plt.plot([date[10], 1],
# [date[25], 20])
#plt.plot_date([date2num(date[0]), value[0]],
# [date2num(date[m]), value[m]])
#plt.plot([2, 3], [25, 10])
plt.plot()
我也試圖與date2num轉換日期時間到數沒有成功(同樣的錯誤):
from matplotlib.dates import date2num
dateNum = [date2num(d) for d in date]
plt.plot(dateNum, value) # Works
plt.axvline(date[10], color='r', zorder=0) # Works
plt.plot_date([date2num(date[0]), value[0]],
[date2num(date[m]), value[m]]) # Gives ValueError: ordinal must be >= 1
任何幫助嗎?
DavidG,謝謝!我花了幾個小時玩這個... –