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

如何为Plotly时间序列图表的X轴添加多层刻度标签

解决方案

要实现Excel中双层分角度、年份合并居中的X轴效果,Plotly原生单轴无法直接实现,可通过双X轴叠加的方案实现,具体代码如下:

library(plotly)
library(lubridate)
# 生成示例数据
dates <- seq.Date(as.Date("2020-01-01"), as.Date("2021-12-31"), 7)
set.seed(42)
values <- rnorm(105, 10, 2)
df <- data.frame(dates = dates, values = values)
# 计算第二层X轴的年份标签位置:取每年的年中日期作为标签位置,实现跨月居中
year_vals <- df %>% 
  mutate(year = year(dates)) %>% 
  group_by(year) %>% 
  summarise(mid_date = median(dates)) %>% 
  pull(mid_date)
year_labels <- unique(year(df$dates))
# 绘图
df %>%
  plot_ly(x=~dates, y=~values) %>%
  add_lines() %>%
  layout(
    # 第一层X轴:显示月份,90度旋转
    xaxis = list(
      dtick = "M1",
      tickformat = "%b",
      tickangle = 90,
      showline = TRUE,
      showticklabels = TRUE,
      ticklen = 5,
      domain = c(0,1)
    ),
    # 第二层X轴:叠加在第一层下方,仅显示居中的年份标签
    xaxis2 = list(
      overlaying = "x",
      position = 0,
      showline = FALSE,
      showticklabels = TRUE,
      tickmode = "array",
      tickvals = year_vals,
      ticktext = year_labels,
      ticklen = 0,
      tickangle = 0,
      domain = c(0,1),
      tickfont = list(size = 12)
    ),
    # 调整底部边距,避免标签被截断
    margin = list(b = 80)
  )

实现逻辑说明

  • 第一层X轴负责显示月份标签,设置tickangle = 90即可实现垂直显示
  • 第二层X轴完全叠加在第一层之上,隐藏轴线和刻度,仅在每年的年中位置显示年份标签,自然实现跨月份居中的合并效果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 18:24:01