簡體   English   中英

用於創建 ggplots 的 for 循環

[英]for-loop to create ggplots

我試圖用 ggplot2 制作箱線圖。

我必須使用我想要的格式制作箱線圖的代碼如下:

p <- ggplot(mg_data, aes(x=Treatment, y=CD68, color=Treatment)) + 
  geom_boxplot(mg_data, mapping=aes(x=Treatment, y=CD68))
p+ theme_classic() + geom_jitter(shape=16, position=position_jitter(0.2))

我可以使用以下代碼制作循環箱線圖:

variables <- mg_data %>%
  select(10:17)

for(i in variables) {                              
  print(ggplot(mg_data, aes(x = Treatment, y = i, color=Treatment)) +
          geom_boxplot())
}

使用此代碼,我得到了箱線圖,但是它們沒有為 y 軸選擇的變量的名稱標簽,這與不使用 for 循環時的原始代碼不同。 我也不知道如何將格式化代碼添加到循環中:

p + theme_classic() + geom_jitter(shape=16, position=position_jitter(0.2))

這是一種方法。 我已經使用內置數據集iris進行了測試,只需更改數據名稱和選定的列即可。

suppressPackageStartupMessages({
  library(dplyr)
  library(ggplot2)
})

variables <- iris %>%
  select(1:4) %>%
  names()

for(i in variables) {
  g <- ggplot(iris, aes(x = Species, y = get(i), color=Species)) +
          geom_boxplot() +
    ylab(i)
  print(g)
}

編輯

回答用戶TarJae評論,在此轉載,因為答案比評論少刪除:

您能否通過保存所有四個文件進行擴展。 非常感謝。

上面的代碼可以在循環結束時使用ggsave指令保存繪圖。 文件名是變量名,繪圖是默認值, last_plot()的返回值。

for(i in variables) {
  g <- ggplot(iris, aes(x = Species, y = get(i), color=Species)) +
          geom_boxplot() +
    ylab(i)
  print(g)
  ggsave(paste0(i, ".png"), device = "png")
}

嘗試這個:

variables <- mg_data %>%
  colnames() %>% 
  `[`(10:17)

for (i in variables) {
  print(ggplot(mg_data, aes(
    x = Treatment, y = {{i}}, color = Treatment
  )) +
    geom_boxplot())
}

另一種選擇是使用lapply 它與使用循環大致相同,但它隱藏了實際的循環部分,並且可以使您的代碼看起來更干凈一些。

variables = iris %>%
  select(1:4) %>%
  names()

lapply(variables, function(x) {
    ggplot(iris, aes(x = Species, y = get(x), color=Species)) +
          geom_boxplot() + ylab(x)
})

暫無
暫無

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

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