首页 > 解决方案 > 更改子图的顺序

问题描述

有没有办法在 R 中更改子图的顺序?有没有办法手动更改此代码中因子的级别?我想要一个在第一个图中带有权重的图,然后是 a,b,c 在它上面的顺序。但我得到的输出是重量、c、a 和 b,如图所示

这是我的代码

df<-data.frame("time"= seq(0.01,10,length.out=100),"Weight"=1:100, "a"=rnorm(100),"b"=rnorm(100),"c"=rnorm(100))

q <- df%>%
  tidyr::gather(variable, value, -time) %>%
  transform(id = as.integer(factor(variable))) %>%
  plot_ly(x = ~time, y = ~value, color = ~variable, colors = "Dark2",
          yaxis = ~paste0("y", id)
          ) %>%

 layout(
  xaxis = list(title = "Time,s",tickfont = list(size = 17),titlefont = list(size = 20)),
  yaxis = list(tickfont = list(size = 17), title="DP"),
  hoverlabel = list(font=list(size=20))
) %>% 
  add_lines() %>%
  subplot(nrows = length(df)-1, shareX = TRUE)

在此处输入图像描述

标签: rplotly

解决方案


一种方法是重新排序因子水平,如下所示:

# set.seed to keep the exact same results 
set.seed(123) 
df<-data.frame("time"= seq(0.01,10,length.out=100),"Weight"=1:100, "a"=rnorm(100),"b"=rnorm(100),"c"=rnorm(100))

DF <- df%>%
  tidyr::gather(variable, value, -time) %>%
  transform(id = as.integer(factor(variable)))
DF$variable <- factor(DF$variable, levels = c("Weight", "a",  "b", "c")) #re-order 

q <- DF %>%
  plot_ly(x = ~time, y = ~value, color = ~variable, colors = "Dark2",
          yaxis = ~paste0("y", sort(id, decreasing =F))) %>% #sort the order
  layout(
    xaxis = list(title = "Time,s",tickfont = list(size = 17),titlefont = list(size = 20)),
    yaxis = list(tickfont = list(size = 17), title="DP"),
    hoverlabel = list(font=list(size=20))
  ) %>% 
  add_lines() %>%
  subplot(nrows = length(df)-1, shareX = TRUE)

q

您将需要sort(id, decreasing =F)获得与您设置的完全相同的顺序factor(DF$variable, levels = c("Weight", "a", "b", "c"))

在此处输入图像描述


推荐阅读