r - 如何在任何给定时间根据数据帧的最大值设置最大 y 轴限制?
问题描述
我对 R 及其功能还很陌生,所以我会尽力解释我的问题。我正在用每周的流行病学数据绘制一个足够简单的折线图。据我所知,我的代码当前下载数据,并以允许添加新数据的方式对其进行操作(即我可以在几个月内运行代码,它会增加我错过的几周)。我目前的最高病例率是 1460,所以当我绘制图表时,我可以手动将限制设置为 1500 或 2000,这很好。但是,如果我在两个月后回来并且现在的病例率为 330,那么我的代码仍将设置最大值为 2000,这不是很像样(或者,虽然希望不是,但比率会增加到 3300)。理想情况下,我不想每次都手动更改限制。
我确实找到了类似的问题和答案,但我并不完全理解日志方面。
我的问题是我是否可以将最大 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("Date\n") + ylab("Weekly Cases\n") +
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 Authority\n") +
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 Present\n")
我目前正在使用 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)))
推荐阅读
- ecmascript-6 - 在 jquery 初始化中出现错误。未捕获的类型错误:无法在(索引)处设置未定义的属性“jquery”:27
- gradle - 将多模块 Gradle 库打包到单个模块中
- c++ - 循环并使用数字的索引作为文件名
- metal - 金属渲染通道中没有颜色附件
- java - 如何使用部件获取多部件/表单数据的参数
- python - 在谷歌云数据流中刷新访问令牌时 GRPC 状态运行时异常
- django - 允许 is_staff=False 访问特定页面 Django
- distributed-computing - 没有领导下台的领导连任?
- reactjs - 如何在反应中使用纯 flatpickr?
- c# - Xamarin 表单中的 CoreBluetooth iOS API