r - 在ggplot中循环对象
问题描述
我有多个相同格式的数据框,我想使用 ggplot 在同一个图中创建多条曲线。每个数据框都有一年的数据,从 1956 年到 2019 年。例如:
Year1956 <- data.frame(prob=c(5, 10, 20, 30, 100), Qmcs=c(1000, 500, 50, 10, 5))
Year1957 <- data.frame(prob=c(1, 3, 25, 35, 100), Qmcs=c(800, 600, 100, 50, 30))
可以手动在同一个图中绘制这些多个对象,其中 ... 将是 Year1958 到 Year2018
ggplot()+
geom_line(data=Year1956, aes(x=prob, y=Qmcs))+
geom_line(data=Year1957, aes(x=prob, y=Qmcs))+
...
geom_line(data=Year2019, aes(x=prob, y=Qmcs))
由于有很多数据帧,有没有办法在循环中执行此操作?先感谢您。
解决方案
geom_line
我的答案不是展示如何遍历数据帧列表以生成单独的geom_line
.
假设我们有一系列带有"Year"
+模式的 data.frames number
。
library(ggplot2)
Year1956 <- data.frame(prob=c(5, 10, 20, 30, 100), Qmcs=c(1000, 500, 50, 10, 5))
Year1957 <- data.frame(prob=c(1, 3, 25, 35, 100), Qmcs=c(800, 600, 100, 50, 30))
我们可以系统地收集所有满足模式的data.frames,通过循环和使用get()
函数。
years <- c(1956:1957)
mylist <- lapply(setNames(nm = years), function(i) {
get(paste0("Year", i), mode = "list")
})
最后,我们可以将所有这些 data.frames 组合在一起,并idcol
使用data.table::rbindlist()
. 然后绘制数据将很简单。
df <- data.table::rbindlist(mylist, idcol = "year")
df$year <- as.numeric(df$year)
ggplot(df, aes(prob, Qmcs, group = year)) +
geom_line()
由reprex 包于 2021-09-12 创建(v2.0.1)
推荐阅读
- ios - 如何将 cell.accessoryType 设置为图像?
- excel - 使间接函数链接到excel动态中的另一个工作表
- kibana - kibana 控制台中的 Elastalert
- python - 值未保存在 django 模型中
- java - 对于 i 的什么值,while (i == i + 1) {} 永远循环?
- javascript - 如果未设置 cookie,则检查数组是否有重复值,不检查是否设置了 cookie
- ios - iPhoneX:AVCaptureVideoPreviewLayer 没有占据整个屏幕?
- android - 我们可以为两个不同的 Android 应用程序使用相同的签名密钥吗?
- kubernetes - Minikube 错误 - 启动主机时出错:临时错误:在主机上配置身份验证时出错:操作系统类型无法识别
- laravel - 我收到对成员函数 diffForHumans 字符串错误的调用