Hello Eric, Jim and Ivan, Many thanks all of your help. I'm a new one in R area. I may not fully understand the idea from you.? I modified my code below, I can get the plots out with correct file name, but plots? are not using correct fields' name. it use y[i], and c[i] as variables' name, does not use hwy, cyl or cty, class in ggplot statement. And there is not any error message. Could you please look into my modified code below and let me know how to modify y= y[i], color = c[i] part? Thanks, Kai y <- c("hwy","cty") c <- c("cyl","class") f <- c("hwy_cyl","cty_class") mac <- data.frame(y,c,f) for (i in seq(nrow(mac))){ ? mpg %>% ? ? filter(hwy <35) %>%? ? ? ggplot(aes(x = displ, y = y[i], color = c[i])) +? ? ? geom_point() ? ggsave(paste0("c:/temp/",f[i],".jpg"),width = 9, height = 6, dpi = 1200, units = "in") } On Wednesday, December 22, 2021, 09:42:45 AM PST, Ivan Krylov <krylov.r00t at gmail.com> wrote: On Wed, 22 Dec 2021 16:58:18 +0000 (UTC) Kai Yang via R-help <r-help at r-project.org> wrote:> mpg %>%? ? filter(hwy <35) %>%?? ? ggplot(aes(x = displ, y = y[i], > color = c[i])) +?? ? geom_point()Your code relies on R's auto-printing, where each line of code executed at the top level (not in loops or functions) is run as if it was wrapped in print(...the rest of the line...). Solution: make that print() explicit. A better solution: explicitly pass the plot object returned by the ggplot functions to the ggsave() function instead of relying on the global state of the program.> ggsave("c:/temp/f[i].jpg",width = 9, height = 6, dpi = 1200, units > "in")When you type "c:/temp/f[i].jpg", what do you get in return? Use paste0() or sprintf() to compose strings out of parts.> ??? [[alternative HTML version deleted]]P.S. Please compose your messages in plain text, not HTML. See the R-help posting guide for more info. -- Best regards, Ivan [[alternative HTML version deleted]]
strange, I got error message when I run again: Error: unexpected symbol in: "? ? geom_point() ? ggsave"> }Error: unexpected '}' in "}" On Wednesday, December 22, 2021, 10:18:56 AM PST, Kai Yang <yangkai9999 at yahoo.com> wrote: Hello Eric, Jim and Ivan, Many thanks all of your help. I'm a new one in R area. I may not fully understand the idea from you.? I modified my code below, I can get the plots out with correct file name, but plots? are not using correct fields' name. it use y[i], and c[i] as variables' name, does not use hwy, cyl or cty, class in ggplot statement. And there is not any error message. Could you please look into my modified code below and let me know how to modify y= y[i], color = c[i] part? Thanks, Kai y <- c("hwy","cty") c <- c("cyl","class") f <- c("hwy_cyl","cty_class") mac <- data.frame(y,c,f) for (i in seq(nrow(mac))){ ? mpg %>% ? ? filter(hwy <35) %>%? ? ? ggplot(aes(x = displ, y = y[i], color = c[i])) +? ? ? geom_point() ? ggsave(paste0("c:/temp/",f[i],".jpg"),width = 9, height = 6, dpi = 1200, units = "in") } On Wednesday, December 22, 2021, 09:42:45 AM PST, Ivan Krylov <krylov.r00t at gmail.com> wrote: On Wed, 22 Dec 2021 16:58:18 +0000 (UTC) Kai Yang via R-help <r-help at r-project.org> wrote:> mpg %>%? ? filter(hwy <35) %>%?? ? ggplot(aes(x = displ, y = y[i], > color = c[i])) +?? ? geom_point()Your code relies on R's auto-printing, where each line of code executed at the top level (not in loops or functions) is run as if it was wrapped in print(...the rest of the line...). Solution: make that print() explicit. A better solution: explicitly pass the plot object returned by the ggplot functions to the ggsave() function instead of relying on the global state of the program.> ggsave("c:/temp/f[i].jpg",width = 9, height = 6, dpi = 1200, units > "in")When you type "c:/temp/f[i].jpg", what do you get in return? Use paste0() or sprintf() to compose strings out of parts.> ??? [[alternative HTML version deleted]]P.S. Please compose your messages in plain text, not HTML. See the R-help posting guide for more info. -- Best regards, Ivan [[alternative HTML version deleted]]
Hello, y[i] and c[i] are character strings, they are not variables of data set mpg. To get the variables, use, well, help("get"). Note that I have changed the temp dir to mine. So I created a variable to hold the value tmpdir <- "c:/temp/" for (i in seq(nrow(mac))){ mpg %>% filter(hwy < 35) %>% ggplot(aes(x = displ, y = get(y[i]), color = get(c[i]))) + geom_point() + ylab(y[i]) + guides(color = guide_legend(title = c[i])) ggsave( paste0(tmpdir, f[i], ".jpg"), width = 9, height = 6, dpi = 1200, units = "in") } Like Ivan said, don't rely on auto print. In order to have to open the graphics files output by the loop I would have done something like the following. First create a list to hold the plots. Inside the for loop save the plots in the list and explicitly print them. And use ggsave argument plot. Like this, after the loop you can see what you have by printing each list member. p <- vector("list", length = nrow(mac)) for (i in seq(nrow(mac))){ mpg %>% filter(hwy < 35) %>% ggplot(aes(x = displ, y = get(y[i]), color = get(c[i]))) + geom_point() + ylab(y[i]) + guides(color = guide_legend(title = c[i])) -> p[[i]] ggsave( paste0(tmpdir, f[i], ".jpg"), plot = p[[i]], width = 9, height = 6, dpi = 1200, units = "in") } # See the first plot p[[1]] Hope this helps, Rui Barradas ?s 18:18 de 22/12/21, Kai Yang via R-help escreveu:> Hello Eric, Jim and Ivan, > Many thanks all of your help. I'm a new one in R area. I may not fully understand the idea from you.? I modified my code below, I can get the plots out with correct file name, but plots? are not using correct fields' name. it use y[i], and c[i] as variables' name, does not use hwy, cyl or cty, class in ggplot statement. And there is not any error message. Could you please look into my modified code below and let me know how to modify y= y[i], color = c[i] part? > Thanks, > Kai > > y <- c("hwy","cty") > c <- c("cyl","class") > f <- c("hwy_cyl","cty_class") > mac <- data.frame(y,c,f) > for (i in seq(nrow(mac))){ > ? mpg %>% > ? ? filter(hwy <35) %>% > ? ? ggplot(aes(x = displ, y = y[i], color = c[i])) + > ? ? geom_point() > ? ggsave(paste0("c:/temp/",f[i],".jpg"),width = 9, height = 6, dpi = 1200, units = "in") > } > > On Wednesday, December 22, 2021, 09:42:45 AM PST, Ivan Krylov <krylov.r00t at gmail.com> wrote: > > On Wed, 22 Dec 2021 16:58:18 +0000 (UTC) > Kai Yang via R-help <r-help at r-project.org> wrote: > >> mpg %>%? ? filter(hwy <35) %>%?? ? ggplot(aes(x = displ, y = y[i], >> color = c[i])) +?? ? geom_point() > > Your code relies on R's auto-printing, where each line of code executed > at the top level (not in loops or functions) is run as if it was > wrapped in print(...the rest of the line...). > > Solution: make that print() explicit. > > A better solution: explicitly pass the plot object returned by the > ggplot functions to the ggsave() function instead of relying on the > global state of the program. > >> ggsave("c:/temp/f[i].jpg",width = 9, height = 6, dpi = 1200, units >> "in") > > When you type "c:/temp/f[i].jpg", what do you get in return? > > Use paste0() or sprintf() to compose strings out of parts. > >> ??? [[alternative HTML version deleted]] > > P.S. Please compose your messages in plain text, not HTML. See the > R-help posting guide for more info. >