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

如何绘制X轴从指定非零值起始的折线图?解决周序间隙问题

解决季节性折线图X轴偏移且无间隙的问题

要实现X轴从指定周(比如30)开始按30、31…52、1、2…29排列,同时避免周52到周1之间的折线间隙,核心思路是用连续数值作为X轴底层数据,自定义刻度标签显示周数——分类轴会把每个周数当成离散类别,这正是之前出现间隙的原因。

具体修改步骤:

  1. 按目标顺序重新排列数据行
  2. 用连续索引作为X轴的实际值,再把刻度标签替换成对应的周数

修改后的完整代码:

import pandas as pd
import numpy as np
import plotly.express as px

def generate_sample_values(param1, param2, startendpoint):
    if startendpoint < 1 or startendpoint > 53:
        raise ValueError
    lst = [(x/param1)+np.random.randint(param2) for x in range(1,startendpoint)]
    lst2 = lst[:53-startendpoint][::-1]
    return lst + lst2

# 生成原始数据
df = pd.DataFrame({
    "week":[x for x in range(1,53)], 
    "2019":generate_sample_values(1,10,30),
    "2020":generate_sample_values(0.5,10,30), 
    "2021":generate_sample_values(2,15,30),
    "2022":generate_sample_values(3,17,30)
}).set_index("week")

# 定义起始周
start_week = 30
# 按目标顺序生成周列表:30-52,再1-29
reordered_weeks = list(range(start_week, 53)) + list(range(1, start_week))
# 重新排列数据,重置索引得到连续的X轴数值
df_reordered = df.loc[reordered_weeks].reset_index()

# 绘制折线图,用重置后的连续索引作为X轴
fig = px.line(df_reordered, x=df_reordered.index, y=df_reordered.columns[1:])
# 自定义X轴:刻度位置对应索引,刻度文本显示实际周数
fig.update_layout(
    xaxis=dict(
        tickvals=list(range(len(df_reordered))),
        ticktext=df_reordered['week'],
        title="周序号"
    ),
    title="季节性周度折线图(从周30开始)"
)
fig.show()

原理说明:

  • 分类轴的问题:把周数设为分类后,Plotly会将每个周数视为独立离散项,周52和周1之间没有连续数值关联,折线自然会断开。
  • 连续轴+自定义刻度:用0-51的连续索引作为X轴底层数据,数据点会按顺序连续连接;同时通过ticktext把刻度显示为对应周数,既满足X轴的显示需求,又保证了折线的连续性。

内容的提问来源于stack exchange,提问作者Ryan Seah

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 19:15:24