簡體   English   中英

ggplot2 - 在循環中向條形圖添加一條線

[英]ggplot2 - Adding a line to a bar graph in a loop

我有以下數據框:

ID <- c('1P', '1P', '1P', '2P', '2P', '2P', '3P', '3P', '3P')
Visit <- c('V1','V2','V3','V1','V2','V3','V1','V2','V3')
var1 <- c(100, 150, 125, 75, 90, 100, 50, 60, 110)
var2<-c(1.1, 0.8,0.7, 1, 0.5, 0.2, 1.8, 0.8, 0.3)
df<- data.frame(ID, Visit, var1, var2)

我已經為 plot 編寫了一個循環,每個 ID 的每次訪問時 var1 的條形圖。

df_split <- split(df, df$ID)
lapply(df_split, function(df) {ggplot(df, aes(x=Visit, y=var1)) +geom_col()})

我想:

  1. 使用 x 軸上的訪問和 y 軸上的 var2 在相同的圖上畫一條線,並在每個 plot 的右側包括相應的第二個 y 軸。
  2. 讓每張圖的標題為對應的ID

我努力了:

lapply(df_split, function(df) {ggplot(NULL) + geom_col(aes(x=Visit, y=var1)) + geom_line(aes(x=Visit, y=var2))})

但是,這似乎不起作用,條形圖似乎都與 plot 相同的數據。 我完全不確定如何將標題添加到循環中。

非常感謝您的寶貴時間!

通常不建議使用兩個 y 軸(原因),但如果你真的想要,你可以調整這個答案來解決你的問題,例如

library(ggplot2)

ID <- c('1P', '1P', '1P', '2P', '2P', '2P', '3P', '3P', '3P')
Visit <- c('V1','V2','V3','V1','V2','V3','V1','V2','V3')
var1 <- c(100, 150, 125, 75, 90, 100, 50, 60, 110)
var2<-c(1.1, 0.8,0.7, 1, 0.5, 0.2, 1.8, 0.8, 0.3)
df<- data.frame(ID, Visit, var1, var2)

df_split <- split(df, df$ID)
#lapply(df_split, function(df) {ggplot(df, aes(x=Visit, y=var1)) +geom_col()})

lapply(df_split, function(df) {
  ylim.prim <- c(0, 150)
  ylim.sec <- c(0, 2)
  var1 <- df$var1
  b <- diff(ylim.prim)/diff(ylim.sec)
  fit = lm(b ~ . + 0, 
           tibble::tribble(
             ~a, ~s, ~b,
             1,  (ylim.sec[1] - mean(var1))/sd(var1),  ylim.prim[1],
             1,  (ylim.sec[2] - mean(var1))/sd(var1), ylim.prim[2]))
  a <- fit$coefficients['a']
  s <- fit$coefficients['s']
  
  ggplot(df) + 
    geom_col(aes(x=Visit, y=var1)) + 
    geom_line(aes(x=Visit, y= a + ((var2 - mean(var1))/sd(var1)) * s), group=1) +
    scale_y_continuous("var1",
                       limits = ylim.prim,
                       sec.axis = sec_axis(~ (. - a) / s * sd(var1) + mean(var1),
                                           name = "var2")) +
    labs(title = df$ID)
  })
#> $`1P`

#> 
#> $`2P`

#> 
#> $`3P`

reprex package (v2.0.1) 於 2022 年 8 月 18 日創建

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM