You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 18:45:04