R语言 如何在绘图中将子图与具有两个y轴的图结合起来?

anauzrmj  于 2023-01-18  发布在  其他
关注(0)|答案(1)|浏览(128)

我想有两个子图,相同的x轴。在顶部的图中,我想有两个y轴。如果我只显示top,两个图都能正确显示。但是在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)

我试图理解Python中的一个类似问题,但我看不出它与我的代码有什么关系。

yqlxgs2m

yqlxgs2m1#

对于双轴绘图,您应该将yaxislayout更改为左侧,这是您的第一个轴,yaxis2更改为右侧,作为第二个y轴,并将“overlaying”参数更改为“y”。

library(plotly)
library(dplyr)

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(yaxis=list(side="left"),
         yaxis2=list(side="right",overlaying="y"))
bottom <- plot_ly() %>%
  add_trace(x=~t,y=~d3,type="scatter",data=df3,mode="lines")
subplot(top, bottom, nrows = 2, shareX = TRUE)

创建于2023年1月17日,使用reprex v2.0.2

相关问题