r语言 - 如何根据数据帧在任何给定时间的最大值设置最大y轴限制?



我对R及其功能相当陌生,所以我会尽我所能解释我的问题。我正在用每周流行病学数据绘制一个简单的折线图。据我所知,我的代码目前下载数据,并以一种允许添加新数据的方式对其进行操作(例如,我可以在几个月的时间内运行代码,它会添加我错过的几周)。目前我的最高病例率是1460,所以当我绘制图表时,我可以手动将限制设置为1500或2000,这很好。然而,如果我在两个月后回来,现在的案例率是330,那么我的代码仍然将最大值设置为2000,这不是很美观(或者,尽管希望不是,比率增加到3300)。理想情况下,我不希望每次都手动更改限制。

我确实找到了一个类似的问题和答案,但我不完全理解日志方面。

如何扩展ggplot y轴限制以包含最大值

我的问题是我是否可以将最大y值编码为四舍五入,比如说,当时数据集最大值的最接近的500 ?例如,如果最高速率为645,则y限制将设置为1000。

Region_Case_Graph <-ggplot(data = Region_Weekly_Cases_Long, 
                          aes(x = date, y = Weekly_Cases, color = Local_Authority)) + 
                          geom_line() + 
                          geom_point() +
                          xlab("Daten") + ylab("Weekly Casesn") + 
                          scale_x_date(date_breaks = "1 month", 
                                       date_labels = "%d-%b-%y")  +
                          theme(axis.text.x = element_text(size = 10, angle = 90, vjust = 0.25)) +
                          labs(color = "Local Authorityn") + 
                          theme(panel.background = element_rect(fill = "white"),
                                panel.grid.major = element_line(size = 0.5, colour = "lightgrey")) +
                          scale_y_continuous(limits = c(0,2000)) +
                          ggtitle("Weekly Cases in each Local Authority, 07/20 to Presentn")
                        

我目前正在使用scale_y_continuous,据我所知,这可能是非常低效的。如果你把这段代码分开,我不会生气,我只是需要知道是否有一个函数(或者你是否可能创建一个?)?

此函数:

round.choose <- function(x, roundTo, dir = 1) {
  if(dir == 1) {  ##ROUND UP
    x + (roundTo - x %% roundTo)
  } else {
    if(dir == 0) {  ##ROUND DOWN
      x - (x %% roundTo)
    }
  }
}

由森林生态学家在这个线程(如何四舍五入到最接近的10(或100或X)?)似乎有效,如果我理解你的问题。

df <- data.frame(x = c(0,1,2,3,4,5),
                 y = c(100, 150, 200, 250, 300, 350))
ggplot(data = df, aes(x = x, y = y)) +
  geom_point() +
  scale_y_continuous(limits = c(0, round.choose(max(df$y), 500, 1)))