matplotlib 時間序列跳過沒有數據的部分 skip-dates-where-there-is-no-data

 在 matplotlib 雙座標 曲線 不同步 (2)完結 中實現了x_tick 和 x_tick_label 定製,下面說說時間序列如何跳過沒有數據的段,matplotlib官方有參考文檔skip-dates-where-there-is-no-data,剩下來介紹如何自己實現:

這是原圖:

這是效果圖:

以下是實現過程,測試過程中發現如果導入數據時不使用時間戳作爲DataFrame 的 index (pandas 自動生成了從0開始增加的整數index)的話是這樣顯示的:

 哈哈,發現沒有,和我們的目標差距就只剩tick_labels 了(tick_labels 就是index),我們只要把tick_labels 替換成日期就可以了,具體只需要把相應的index對應的時間戳格式化成日期保存起來就可以,Code:

def make_local_ticks_and_labels_skip_no_data(data_frame_new):
    label_count = len(data_frame_new)
    tick_count = label_count//5
    
    tick_labels = []
    ticks = []
    ticks.append(data_frame_new.index[0])
    tick_labels.append(data_frame_new['Stamp'][0].strftime('%Y-%m-%d'))
    for i in range(4):
        ticks.append(data_frame_new.index[tick_count*(i+1)])
        tick_labels.append(data_frame_new['Stamp'][tick_count*(i+1)].strftime('%Y-%m-%d'))
    tick_labels.append(data_frame_new['Stamp'][label_count-1].strftime('%Y-%m-%d'))
    ticks.append(data_frame_new.index[label_count-1])
    return ticks,tick_labels

我這裏顯示了6個tick_labels,同樣的使用時只需 axs.set_xticks(ticks) axs.set_xticklabels(tick_labels) 就可以了 。要注意的是參數data_frame_new 是一個以0開始整數遞增index的DataFrame,那如何讓一個DataFrame的index從時間戳變爲從0開始整數遞增呢?data_frame_new = data_frame_new.reset_index()

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章