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

Plotly中含双Y轴的图表与子图组合及缺失问题解决

共享X轴子图中双Y轴曲线消失的问题解决

问题描述

创建两个共享X轴的子图,顶部子图包含双Y轴。单独展示顶部图表(top)时,df1和df2的曲线正常显示,但组合子图(both)后,df2的曲线消失。

代码示例:

library(plotly)
library(tidyverse)

df1 <- data.frame(t=seq(5)) %>% mutate(d1=t+7)
df2 <- data.frame(t=seq(2,6)) %>% mutate(d2=t*t+20)
df3 <- data.frame(t=seq(0,8)) %>% mutate(d3=-2-t)

top <- plot_ly() %>%
  add_trace(x=~t,y=~d1,type="scatter",data=df1,mode="lines") %>%
  add_trace(x=~t,y=~d2,type="scatter",data=df2,mode="lines",yaxis = "y2") %>%
  layout(yaxis2 = list(overlaying = "y", side = "right"))
bottom <- plot_ly() %>%
  add_trace(x=~t,y=~d3,type="scatter",data=df3,mode="lines")
both <- list(top ,bottom ) %>% subplot(nrows=2,shareX=T)

原因分析

使用subplot()组合子图并开启shareX=T时,plotly会统一重置子图的轴配置,顶部子图中yaxis2的overlaying属性会失效,导致df2的曲线因轴配置错误被隐藏,或Y轴范围未适配数据而无法显示。

修复方法

组合子图后,重新指定yaxis2的配置,确保其overlaying属性生效。修改后的代码如下:

library(plotly)
library(tidyverse)

df1 <- data.frame(t=seq(5)) %>% mutate(d1=t+7)
df2 <- data.frame(t=seq(2,6)) %>% mutate(d2=t*t+20)
df3 <- data.frame(t=seq(0,8)) %>% mutate(d3=-2-t)

top <- plot_ly() %>%
  add_trace(x=~t,y=~d1,type="scatter",data=df1,mode="lines") %>%
  add_trace(x=~t,y=~d2,type="scatter",data=df2,mode="lines",yaxis = "y2") %>%
  layout(yaxis2 = list(overlaying = "y", side = "right"))

bottom <- plot_ly() %>%
  add_trace(x=~t,y=~d3,type="scatter",data=df3,mode="lines")

# 组合后重新设置yaxis2配置,恢复overlaying属性
both <- list(top, bottom) %>% 
  subplot(nrows=2, shareX=T) %>%
  layout(yaxis2 = list(overlaying = "y", side = "right"))

both

核心是保证yaxis2的overlaying = "y"参数在组合后的布局中保留,也可以在创建顶部子图时明确轴的命名,再在组合后同步配置,效果一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 09:25:26