Python matplotlib绘图如何让线段越过x轴边界衔接年初日序
实现跨边界日序线段绘制的方案
原有直接传入整列调用plt.hlines的方式,当start>end时,matplotlib会自动交换两者的大小绘制从end到start的线段,和预期效果不符。
核心处理逻辑:对每条事件的起止日序做判断,如果start > end,说明该事件为跨年末到年初的事件,需要拆分为两段分别绘制,其余正常绘制即可。
修改后的完整代码如下:
import pandas as pd import numpy as np import matplotlib.pyplot as plt data = pd.DataFrame(np.array([[3,123,189],[2,214,365],[1,205,22]]), columns=['name','start','end']) # 定义一年的日序范围 max_day = 365 min_day = 1 # 遍历每条记录分别处理 for _, row in data.iterrows(): y_val = row['name'] start_day = row['start'] end_day = row['end'] if start_day <= end_day: # 非跨边界事件正常绘制 plt.hlines(y_val, start_day, end_day, linewidth=1) else: # 跨边界事件拆成两段绘制 plt.hlines(y_val, start_day, max_day, linewidth=1) plt.hlines(y_val, min_day, end_day, linewidth=1) plt.xlabel('Date') plt.ylabel('Event') plt.xlim(min_day, max_day) plt.show()
以上方案全程仅使用整数日序计算,无需引入datetime相关依赖,最终绘制的跨边界事件会显示为205日到365日、1日到22日的两段线段,符合要求的效果。
内容的提问来源于stack exchange,提问作者asdf
相关产品推荐
相关产品推荐

