save graphs to .jpg file

Why do not these graphs save in the .jpg file? The codes are able to generate graphs in
default plots panel, but can't be saved in C:\Temp\1_AK.jpg...files.
The .jpg files are there, but are empty. Also if I want to be back to default device setting,
I have to restart session. Something is related to dev.off() and jpeg(). No idea!
Any suggestion? Thanks in advance.

library(tidyverse)

all_st <- data.frame(
stringsAsFactors = FALSE,
state = c("AK","AK","AK","AK","AK",
"AK","AK","AK","AK","AK","AK","AK","AK","AK","AK",
"AK","AK","AK","AK","AK","AK","AK","AK","AK",
"AL","AL","AL","AL","AL","AL","AL","AL","AL","AL",
"AL","AL","AL","AL","AL","AL","AL","AL","AL",
"AL","AL","AL","AL","AL","AL","AL","AL","AL","AL",
"AL","AL","AL","AL","AL","AL","AL","AL","AL",
"AL","AL","AL","AL","AL","AL","AL","AL","AL","AL"),
mif_id = c(1,1,1,1,1,1,1,1,2,2,2,
2,2,2,2,2,5,5,5,5,5,5,5,5,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,
2,2,2,2,2,2,2,5,5,5,5,5,5,5,5,5,5,5,5,
5,5,5,5),
reporting_period = c("1Q22","1Q22","2Q22","2Q22",
"3Q22","3Q22","4Q22","4Q22","1Q22","1Q22","2Q22",
"2Q22","3Q22","3Q22","4Q22","4Q22","1Q22","1Q22",
"2Q22","2Q22","3Q22","3Q22","4Q22","4Q22","1Q21",
"1Q21","1Q22","1Q22","2Q21","2Q21","2Q22","2Q22",
"3Q21","3Q21","3Q22","3Q22","4Q21","4Q21","4Q22",
"4Q22","1Q21","1Q21","1Q22","1Q22","2Q21","2Q21",
"2Q22","2Q22","3Q21","3Q21","3Q22","3Q22","4Q21","4Q21",
"4Q22","4Q22","1Q21","1Q21","1Q22","1Q22","2Q21",
"2Q21","2Q22","2Q22","3Q21","3Q21","3Q22","3Q22",
"4Q21","4Q21","4Q22","4Q22"),
type = c(1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1),
group = c("Rate","Nat_avg","Rate",
"Nat_avg","Rate","Nat_avg","Rate","Nat_avg","Rate",
"Nat_avg","Rate","Nat_avg","Rate","Nat_avg","Rate",
"Nat_avg","Rate","Nat_avg","Rate","Nat_avg","Rate",
"Nat_avg","Rate","Nat_avg","Rate","Nat_avg","Rate",
"Nat_avg","Rate","Nat_avg","Rate","Nat_avg","Rate",
"Nat_avg","Rate","Nat_avg","Rate","Nat_avg","Rate",
"Nat_avg","Rate","Nat_avg","Rate","Nat_avg","Rate",
"Nat_avg","Rate","Nat_avg","Rate","Nat_avg","Rate",
"Nat_avg","Rate","Nat_avg","Rate","Nat_avg","Rate",
"Nat_avg","Rate","Nat_avg","Rate","Nat_avg","Rate",
"Nat_avg","Rate","Nat_avg","Rate","Nat_avg","Rate",
"Nat_avg","Rate","Nat_avg"),
rates = c(91,94,100,95,89,95,93,94,
100,99,100,99,100,99,100,99,100,97,100,97,
100,97,100,97,93,95,93,94,93,96,93,95,91,94,
94,95,91,94,94,94,99,99,99,99,100,99,100,99,
99,99,99,99,99,99,100,99,97,97,97,97,94,97,
96,97,96,98,97,97,96,97,97,97)
)
stlist <- as.vector(all_st$state) %>% unique()

for(i in 1:length(stlist)){

stcd=stlist[i]
st_data <- all_st %>% filter(state==stcd)

msrlist <- as.vector(st_data$mif_id) %>% unique()

for(j in 1:length(msrlist)){

msrcd <- msrlist[j]
one_msr <- st_data %>% filter(mif_id==msrcd)

# reset device
dev.off()

fullname <- paste0('C:\\Temp\\',msrcd,'_',stcd,'.jpg')
 
# open JPEG device
jpeg(filename = fullname, width = 540, height = 360,
     pointsize = 12, quality = 75)

ggplot(one_msr, aes(y=rates, x=reporting_period, group=group, color=group)) + 
  geom_point(size=3) +
  geom_line(linewidth=1) +
  scale_colour_manual(name=" ", values=c(Nat_avg="blue",Rate="red"), 
                      breaks=c("Rate","Nat_avg"),
                      labels=c("State Rate","Overall Rate")) +
  theme(legend.position = "bottom", axis.text.x = element_text(angle=30, hjust=1, vjust=.5))

}
}

dev.off()

Hi @tjcnnl1
This version produces the graphs. ggplot objects have to be explicitly printed when used in a loop like this. You can also use the ggsave() function.

for(i in 1:length(stlist)){

stcd <- stlist[i]
st_data <- all_st %>% filter(state==stcd)

msrlist <- as.vector(st_data$mif_id) %>% unique()

for(j in 1:length(msrlist)){

msrcd <- msrlist[j]
one_msr <- st_data %>% filter(mif_id==msrcd)

fullname <- paste0('C:\\Temp\\',msrcd,'_',stcd,'.jpg')
 
# open JPEG device
jpeg(filename = fullname, width = 540, height = 360,
     pointsize = 12, quality = 75)

p <- ggplot(one_msr, aes(y=rates, x=reporting_period, group=group, color=group)) + 
  geom_point(size=3) +
  geom_line(linewidth=1) +
  scale_colour_manual(name=" ", values=c(Nat_avg="blue",Rate="red"), 
                      breaks=c("Rate","Nat_avg"),
                      labels=c("State Rate","Overall Rate")) +
  theme(legend.position = "bottom", axis.text.x = element_text(angle=30, hjust=1, vjust=.5))

print(p)
dev.off()
}
}
1 Like

This topic was automatically closed 7 days after the last reply. New replies are no longer allowed.

If you have a query related to it or one of the replies, start a new topic and refer back with a link.