[英]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.