1.解決的問題
- 日期時間做X軸凝化,設定主副刻度
- 當X軸為日期時間時,annotate標注功能X軸坐標獲取問題瞧哟,即將x軸所在點的日期時間通過mdates.date2num()轉為數字即可枪向。關鍵代碼如下:
ax1.annotate("annotate msg ", xy=(mdates.date2num(x[1]), sales[1]), xycoords='data', color='red')
2.演示代碼
主體代碼來源:https://blog.csdn.net/helunqu2017/article/details/78736686,略改
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
from datetime import datetime
import matplotlib as mpl
import matplotlib.dates as mdates
# 銷售數據
dates = [20171101, 20171102, 20171103, 20171104]
sales = [102.1, 100.6, 849, 682]
# 將dates改成日期格式
x = [datetime.strptime(str(d), '%Y%m%d').date() for d in dates]
# figure布局
fig = plt.figure(figsize=(8, 4))
ax1 = fig.add_subplot(1, 1, 1)
# 繪圖
ax1.plot(x, sales, ls='--', lw=3, color='b', marker='o', ms=6, mec='r', mew=2, mfc='w', label='業(yè)績趨勢走向')
# 標注
ax1.annotate("annotate msg ", xy=(mdates.date2num(x[1]), sales[1]), xycoords='data', color='red')
plt.gcf().autofmt_xdate() # 自動旋轉日期標記
# 設置x軸主刻度格式
alldays = mdates.DayLocator() # 主刻度為每天
ax1.xaxis.set_major_locator(alldays) # 設置主刻度
ax1.xaxis.set_major_formatter(mdates.DateFormatter('%Y%m%d'))
# 設置副刻度格式
hoursLoc = mpl.dates.HourLocator(interval=6) # 為6小時為1副刻度
ax1.xaxis.set_minor_locator(hoursLoc)
ax1.xaxis.set_minor_formatter(mdates.DateFormatter('%H'))
# 參數pad用于設置刻度線與標簽間的距離
ax1.tick_params(pad=10)
# 顯示圖像
plt.show()