-1

How do I create a loop that will produce and save 45 different line plots based on "Name" in the .csv file?

I have one large .csv file that contains data for 45 different buildings by date. I need to create a line plot for each building that shows the numbers on the y-axis and date on the x-axis.

I tried using a list() for the buildings to use within the loop, but real building names are too complicated for R.

The code below produces 45 identical plots with different titles. Each plot contains all the data, instead of just the data for one building.


# Read in .csv file
d <- read_csv("res_data_ABC.csv")

# Reshape the data to make it longer and omit NA 
d_long <- na.omit(pivot_longer(d, cols = -Name, names_to = "date", values_to = "n"))
print(d_long)
# A tibble: 114 x 3
   Name       date         n
   <chr>      <chr>    <dbl>
 1 Building 1 09/14/20  2030
 2 Building 1 09/21/20 17900
 3 Building 1 09/30/20  1380
 4 Building 2 09/14/20    57
 5 Building 2 09/21/20     0
 6 Building 2 09/28/20   301
 7 Building 3 09/14/20 79200
 8 Building 3 09/21/20 23700
 9 Building 3 09/30/20 21800
10 Building 4 09/16/20   496
# … with 104 more rows

# Begin for loop for each building's plot
for (i in d_long$Name) {
  ggplot(d_long, aes(date, n)) + geom_line() + ggtitle(i) + theme(axis.text.x = element_text(angle = 90)) + ylab("viral density/L") + theme(plot.title = element_text(size = 14, face = "bold", hjust=0.5), axis.title.x = element_text(size = 12, face = "bold"), axis.title.y = element_text(size = 12, face = "bold"))
  ggsave(paste0("~/Desktop/plots/", i, ".png"), width = 6, height = 5, units = "cm", dpi=300)
}

These are plots produced: https://i.stack.imgur.com/5HWI3.png

I can't figure out how to limit the data in each plot by individual buildings.

4

1 回答 1

0

在 for 循环中,您使用的是整个数据框。你应该在你的 for 循环中过滤它

for (i in d_long$Name) {
  ggplot(d_long[d_long$Name == i,], aes(date, n)) + geom_line() + ggtitle(i) + theme(axis.text.x = element_text(angle = 90)) + ylab("viral density/L") + theme(plot.title = element_text(size = 14, face = "bold", hjust=0.5), axis.title.x = element_text(size = 12, face = "bold"), axis.title.y = element_text(size = 12, face = "bold"))
  ggsave(paste0("~/Desktop/plots/", i, ".png"), width = 6, height = 5, units = "cm", dpi=300)
}
于 2020-10-06T01:56:54.870 回答