在上一篇中,本人片面的認爲問題解決了,後來認真一看曲線確實同步了,可是橫座標慘不忍睹,如下圖所示:
認爲是下面這條設置橫座標label 位置的問題,實際上經過測試將這句位置上調整到ax2=axs.twinx() 之前,作用就沒有了,混亂的橫座標是自動生成的。
plt.xticks(pd.date_range(start=start_index,end=end_index,freq='20D'),pd.date_range(start=start_index,end=end_index,freq='20D').astype(str))
至於爲什麼會出現兩條曲線不同步,原因是 pd.date_range(start=start_index,end=end_index,freq='20D') 生成的tick在實際數據中的時間戳是不存在的,找到原因就知道如何處理了:tick 根據實際數據的時間戳生成,當然爲了防止tick_labels 相互覆蓋,只選取有限個點,這裏我選6個,並且爲了美觀格式化爲年月日,函數返回兩個列表ticks 和tick_labels,使用時只需 axs.set_xticks(ticks) axs.set_xticklabels(tick_labels) 就可以了,Code:
def make_local_ticks_and_labels(data_frame):
label_collection = data_frame.index.to_pydatetime()
label_count = len(label_collection)
tick_count = label_count//5
tick_labels = []
ticks = []
ticks.append(data_frame.index[0])
tick_labels.append(label_collection[0].strftime('%Y-%m-%d'))
for i in range(4):
ticks.append(data_frame.index[tick_count*(i+1)])
tick_labels.append(label_collection[tick_count*(i+1)].strftime('%Y-%m-%d'))
tick_labels.append(label_collection[-1].strftime('%Y-%m-%d'))
ticks.append(data_frame.index[-1])
return ticks,tick_labels
效果圖:
另外,如果要跳過沒數據的那一段要怎麼處理呢?matplotlib官方有文檔skip-dates-where-there-is-no-data,但是感覺理解不了,就自己實現了一個,如何實現請聽下回分解。