I've leaned heavily on a couple other SO posts already, but can't seem to get past this one. Here are the references i've used:
Loop with a defined ggplot function over multiple dataframes
Loop in R to create and save series of ggplot2 plots with specified names
My goal is to use a loop to save each pie plot from the list of dataframes: "Sample_List" (which will be much longer). I keep getting this error though, and am stumped:
"Error: Aesthetics must be either length 1 or the same as the data (1): fill, y" Data:
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 Here's what i have so far:
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)) } And ultimately i'd like to replace the print function in the loop with a ggsave function that works... heres my effort:
ggsave(DZpie.fn, filename=paste("/outputpath/",i,".png",sep="")) Thanks in advance for the help!!
fillparameter of ggpie. Try to change it tofill = Potential_Sources. Or a vector likec('red', 'blue', 'yellow')with valid length according to your dataContributionnotRelative_Contribution, that's why it was not found. Same forSources. Just try something simple likeggpie(df, Contribution, label = "Relative_Contribution", fill = Contribution)