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

如何用Plotly制作X轴以周数为数据、月份为标签的年度折线图

问题

我有一个包含4列的DataFrame,列分别为year、month、week_no(年中的周数)以及计数字段starts。想要绘制折线图,展示各年度的starts数量,每一年一条独立折线。要求X轴以week_no为数据,但轴标签显示月份,类似示例图效果。

DataFrame示例数据:

yearmonthweek_nostarts
2021Dec50101
2021Dec51104
2021Dec52110
2022Jan1111
2022Jan2115
2022Jan3144
2022Jan4156

我用了以下Plotly代码,但生成的图表X轴显示的是周数,没达到需求:

plot_ly(df, x = ~week_no, y = ~starts, type = 'scatter', color = ~year, mode = 'lines')

需要调整实现X轴以周数为数据、月份为标签的折线图。

解决方案

要实现这个需求,核心是保留week_no作为绘图的基准数据,同时用月份替换周数作为X轴的刻度标签,具体步骤如下:

  1. 预处理数据,确定月份对应的周数刻度点
    先为每个year-month分组找到最小的week_no,这个值就是该月份在X轴上的刻度位置,同时生成对应的月份标签:
library(dplyr)
# 生成月份刻度的位置和标签
month_ticks <- df %>%
  group_by(year, month) %>%
  summarise(week_pos = min(week_no)) %>%
  ungroup() %>%
  mutate(tick_label = paste(month, year))
  1. 配置Plotly图表的X轴
    在layout()中通过tickvals指定刻度对应的周数位置,ticktext指定要显示的月份标签,同时保留原有的周数作为绘图数据:
library(plotly)
plot_ly(df, x = ~week_no, y = ~starts, type = 'scatter', color = ~year, mode = 'lines') %>%
  layout(
    xaxis = list(
      tickvals = month_ticks$week_pos,
      ticktext = month_ticks$tick_label,
      title = "月份"
    ),
    yaxis = list(title = "Starts数量")
  )
  1. 可选优化
    如果希望标签更简洁,可以调整标签格式,比如只显示月份缩写和年份后两位:
month_ticks <- month_ticks %>%
  mutate(tick_label = paste(month, substr(year, 3,4)))

这样生成的折线图会以周数保证折线的位置准确性和连续性,同时X轴显示对应的月份标签,完全符合需求。

内容的提问来源于stack exchange,提问作者Nick Read

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 09:15:29