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

Plotly图表优化:轴标题位置、轴间距及线条粗细调整

Plotly图表需求解决方案

针对你提出的三个需求,以下是具体修改方案和完整代码:

需求a:将各轴标题水平放置在对应轴的上方

在每个轴的title配置中添加orientation = "h",同时调整y参数将标题定位到轴线上方:

  • 左侧双y轴(yaxis、yaxis2)设置y = 1.02,让标题悬浮在轴线正上方
  • 右侧y轴(yaxis3)同样设置y = 1.02,保持布局统一
  • X轴标题默认水平,无需额外调整方向

需求b:缩小y=0与X轴之间的间距

将所有y轴的range下限设为略小于0的数值,消除Plotly默认的轴内边距,让y=0线与X轴紧密贴合:

  • 对VO2/VCO2对应的y轴,用最大值的-2%作为下限
  • 对Power对应的y轴,用其最大值的-2%作为下限

需求c:让Power系列y=0段与y>0段线条粗细一致

在绘制Power系列时,显式指定line的width参数(示例中设为2),强制所有线段使用统一粗细,避免Plotly对全0数据的默认样式调整。


修改后的完整代码

library(plotly)

# 样本数据
d <- data.frame(
  time = seq(1, 600, by = 1),
  VO2 = c(rnorm(120, 250, 10), rnorm(120, 300, 15), seq(300, 2000, length.out = 240), rnorm(120, 300, 15)),
  VCO2 = c(rnorm(120, 200, 10), rnorm(120, 250, 15), seq(250, 1800, length.out = 240), rnorm(120, 250, 15)),
  power = c(rep(0, 120), rep(0, 120), seq(0, 160, length.out = 240), rep(0, 120))
)

# 预计算最大值简化配置
max_vo2_vco2 <- max(c(d$VO2, d$VCO2))
max_power <- max(d$power)

# 创建图表
fig <- plot_ly(data = d) %>% 
  add_lines(x = ~time, y = ~VO2, 
            line = list(color = 'blue', width = 2), name = "VO2") %>% 
  add_lines(x = ~time, y = ~VCO2, yaxis = "y2", 
            line = list(color = 'red', width = 2), name = "VCO2") %>%
  add_lines(x = ~time, y = ~power, yaxis = "y3", 
            line = list(color = 'green', width = 2), name = "Power") %>%
  layout(
    xaxis = list(
      title = list(text = 'Time [sec]', standoff = 10),
      color = 'black', 
      showline = TRUE, 
      tickcolor = 'black', 
      tickwidth = 2, 
      linewidth = 2,
      ticks = "outside"
    ),
    yaxis = list(
      title = list(text = 'VO2', standoff = 10, orientation = "h", y = 1.02), 
      showline = TRUE, 
      side = "left", 
      color = 'blue', 
      tickcolor = 'blue', 
      tickwidth = 2, 
      linewidth = 2,
      ticks = "outside",
      range = c(-max_vo2_vco2*0.02, max_vo2_vco2)
    ),
    yaxis2 = list(
      title = list(text = 'VCO2', standoff = 10, orientation = "h", y = 1.02), 
      showline = TRUE, 
      overlaying = "y", 
      anchor = "free", 
      side = "left", 
      color = 'red', 
      tickcolor = 'red', 
      tickwidth = 2, 
      linewidth = 2,
      ticks = "outside",
      position = -0.1,
      range = c(-max_vo2_vco2*0.02, max_vo2_vco2)
    ),
    yaxis3 = list(
      title = list(text = 'Power', standoff = 10, orientation = "h", y = 1.02), 
      showline = TRUE, 
      overlaying = "y", 
      side = "right", 
      color = 'green', 
      tickcolor = 'green', 
      tickwidth = 2, 
      linewidth = 2,
      ticks = "outside",
      range = c(-max_power*0.02, max_power * 1.25)
    ),
    showlegend = FALSE, # 隐藏图例
    margin = list(pad = 50, b = 0, l = 100, r = 100)
  ) 

fig

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 11:40:11