在 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()