你如何在 R 中使用带有 ggpie 函数的循环并在数据帧之后保存文件名?
How do you use loop in R with ggpie function and save a filename after the dataframe?
我已经严重依赖其他几个 SO 帖子,但似乎无法超越这个。
以下是我使用的参考资料:
Loop in R to create and save series of ggplot2 plots with specified names
我的目标是使用循环保存数据帧列表中的每个饼图:“Sample_List”(这会更长)。虽然我一直收到这个错误,但我很困惑:
"Error: Aesthetics must be either length 1 or the same as the data (1): fill, y"
数据:
DZmix_SC1:
# A tibble: 3 × 4
Sample_ID Potential_Sources Relative_Contribution Metric
<chr> <chr> <dbl> <chr>
1 SC1_18 Uintas 0 KV
2 SC1_18 Sierra Madre 22 KV
3 SC1_18 CMB 78 KV
DZmix_5_SC:
# A tibble: 3 × 4
Sample_ID Potential_Sources Relative_Contribution Metric
<chr> <chr> <dbl> <chr>
1 5-SC_18 Uintas 0 KV
2 5-SC_18 Sierra Madre 29 KV
3 5-SC_18 CMB 71 KV
DZmix_PL3:
# A tibble: 3 × 4
Sample_ID Potential_Sources Relative_Contribution Metric
<chr> <chr> <dbl> <chr>
1 PL3_18 Uintas 69 KV
2 PL3_18 Sierra Madre 0 KV
3 PL3_18 CMB 31 KV
这是我目前的情况:
Sample_list <- c("DZmix_SC1", "DZmix_5_SC", "DZmix_PL3")
DZpie.fn <- function(df,title) {
df <- df %>%
mutate(Relative_Contribution = round(Relative_Contribution,1)) %>%
arrange(desc(Potential_Sources))
ggpie(df,"Relative_Contribution", label = "Relative_Contribution",
fill = "Potential_Sources", color = "white", size = 1.5,
palette = c("#636363", "#cccccc", "#969696")) +
lab.pos = c("in"),
lab.font = c(0, "bold", "black")) +
theme(legend.position = "none",
panel.background = element_rect(fill = "transparent"),
plot.background = element_rect(fill = "transparent", color = NA))
} #end DZpie.fn
for(i in Sample_list){
print(DZpie.fn(get(i), i))
}
最终我想用一个有效的 ggsave 函数替换循环中的 print 函数...这是我的努力:
ggsave(DZpie.fn, filename=paste("/outputpath/",i,".png",sep=""))
在此先感谢您的帮助!!
这对我有用
library(tibble)
library(dplyr)
library(ggpubr)
DZmix_SC1 <- tibble(
Sample_ID = rep('SC1_18', 3),
Potential_Sources = c('Uintas', 'Sierra Madre', 'CMB'),
Relative_Contribution = c(0,22,78),
Metric = rep('KV', 3)
)
DZmix_5_SC <- tibble(
Sample_ID = rep('5-SC_18', 3),
Potential_Sources = c('Uintas', 'Sierra Madre', 'CMB'),
Relative_Contribution = c(0,29,71),
Metric = rep('KV', 3)
)
DZmix_PL3 <- tibble(
Sample_ID = rep('PL3_18', 3),
Potential_Sources = c('Uintas', 'Sierra Madre', 'CMB'),
Relative_Contribution = c(69,0,31),
Metric = rep('KV', 3)
)
Sample_list <- c("DZmix_SC1", "DZmix_5_SC", "DZmix_PL3")
DZpie.fn <- function(df,title) {
df <- df %>%
mutate(Relative_Contribution = round(Relative_Contribution,1)) %>%
arrange(desc(Potential_Sources))
ggpie(df, "Relative_Contribution", label = "Relative_Contribution",
fill = "Potential_Sources", color = "white", size = 1.5,
palette = c("#636363", "#cccccc", "#969696"),
lab.pos = c("in"),
lab.font = c(0, "bold", "black")) +
theme(legend.position = "none",
panel.background = element_rect(fill = "transparent"),
plot.background = element_rect(fill = "transparent", color = NA))
}
for(i in Sample_list){
print(DZpie.fn(get(i), i))
}
其实你的方法是对的。您只是错过了 lab.pos = c("in")
之前的 +
。
然后您可以使用
保存图像
for (i in Sample_list){
ggsave(DZpie.fn(get(i), i), filename=paste0("temp/",i,".png"))
}
或等效但没有 for 循环
purrr::walk(Sample_list, function(name) ggsave(DZpie.fn(get(name), name),
filename=paste0("temp/",name,".png")))
我已经严重依赖其他几个 SO 帖子,但似乎无法超越这个。 以下是我使用的参考资料:
Loop in R to create and save series of ggplot2 plots with specified names
我的目标是使用循环保存数据帧列表中的每个饼图:“Sample_List”(这会更长)。虽然我一直收到这个错误,但我很困惑:
"Error: Aesthetics must be either length 1 or the same as the data (1): fill, y"
数据:
DZmix_SC1:
# A tibble: 3 × 4
Sample_ID Potential_Sources Relative_Contribution Metric
<chr> <chr> <dbl> <chr>
1 SC1_18 Uintas 0 KV
2 SC1_18 Sierra Madre 22 KV
3 SC1_18 CMB 78 KV
DZmix_5_SC:
# A tibble: 3 × 4
Sample_ID Potential_Sources Relative_Contribution Metric
<chr> <chr> <dbl> <chr>
1 5-SC_18 Uintas 0 KV
2 5-SC_18 Sierra Madre 29 KV
3 5-SC_18 CMB 71 KV
DZmix_PL3:
# A tibble: 3 × 4
Sample_ID Potential_Sources Relative_Contribution Metric
<chr> <chr> <dbl> <chr>
1 PL3_18 Uintas 69 KV
2 PL3_18 Sierra Madre 0 KV
3 PL3_18 CMB 31 KV
这是我目前的情况:
Sample_list <- c("DZmix_SC1", "DZmix_5_SC", "DZmix_PL3")
DZpie.fn <- function(df,title) {
df <- df %>%
mutate(Relative_Contribution = round(Relative_Contribution,1)) %>%
arrange(desc(Potential_Sources))
ggpie(df,"Relative_Contribution", label = "Relative_Contribution",
fill = "Potential_Sources", color = "white", size = 1.5,
palette = c("#636363", "#cccccc", "#969696")) +
lab.pos = c("in"),
lab.font = c(0, "bold", "black")) +
theme(legend.position = "none",
panel.background = element_rect(fill = "transparent"),
plot.background = element_rect(fill = "transparent", color = NA))
} #end DZpie.fn
for(i in Sample_list){
print(DZpie.fn(get(i), i))
}
最终我想用一个有效的 ggsave 函数替换循环中的 print 函数...这是我的努力:
ggsave(DZpie.fn, filename=paste("/outputpath/",i,".png",sep=""))
在此先感谢您的帮助!!
这对我有用
library(tibble)
library(dplyr)
library(ggpubr)
DZmix_SC1 <- tibble(
Sample_ID = rep('SC1_18', 3),
Potential_Sources = c('Uintas', 'Sierra Madre', 'CMB'),
Relative_Contribution = c(0,22,78),
Metric = rep('KV', 3)
)
DZmix_5_SC <- tibble(
Sample_ID = rep('5-SC_18', 3),
Potential_Sources = c('Uintas', 'Sierra Madre', 'CMB'),
Relative_Contribution = c(0,29,71),
Metric = rep('KV', 3)
)
DZmix_PL3 <- tibble(
Sample_ID = rep('PL3_18', 3),
Potential_Sources = c('Uintas', 'Sierra Madre', 'CMB'),
Relative_Contribution = c(69,0,31),
Metric = rep('KV', 3)
)
Sample_list <- c("DZmix_SC1", "DZmix_5_SC", "DZmix_PL3")
DZpie.fn <- function(df,title) {
df <- df %>%
mutate(Relative_Contribution = round(Relative_Contribution,1)) %>%
arrange(desc(Potential_Sources))
ggpie(df, "Relative_Contribution", label = "Relative_Contribution",
fill = "Potential_Sources", color = "white", size = 1.5,
palette = c("#636363", "#cccccc", "#969696"),
lab.pos = c("in"),
lab.font = c(0, "bold", "black")) +
theme(legend.position = "none",
panel.background = element_rect(fill = "transparent"),
plot.background = element_rect(fill = "transparent", color = NA))
}
for(i in Sample_list){
print(DZpie.fn(get(i), i))
}
其实你的方法是对的。您只是错过了 lab.pos = c("in")
之前的 +
。
然后您可以使用
保存图像for (i in Sample_list){
ggsave(DZpie.fn(get(i), i), filename=paste0("temp/",i,".png"))
}
或等效但没有 for 循环
purrr::walk(Sample_list, function(name) ggsave(DZpie.fn(get(name), name),
filename=paste0("temp/",name,".png")))