r - 使用 stat_function 或 geom_function 时参考子集数据框
问题描述
我正在尝试使用仅包含模型系数的数据框绘制曲线。我想为一组中的每个代表创建一条曲线,但我不知道如何stat_function
找到各自的系数。这是我尝试过的(不成功的)方法的代表。
df <- data.frame(cohort = c("la", "la", "la", "li", "li", "li", "lo", "lo", "lo"),
rep = c(1, 2, 3, 1, 2, 3, 1, 2, 3),
coef_a = c(0.000000308, -0.000000179, -0.000000219, -0.000000195,
-0.000000179, -0.000000219, -0.000000195,-0.000000308, -0.000000179),
coef_b = c(-0.0168, 0.0112, 0.0126, 0.0119, 0.0112, 0.0126, 0.0119, -0.0168,
0.0112),
coef_c = c(437, 9.90, 1.56, 44.5, 9.90, 1.56, 44.5,437, 9.90))
curve <- function(x, a, b, c){a * x^2 + b * x + c}
df %>%
filter(cohort == "la") %>%
ggplot(aes(color = rep)) +
xlim(20000, 50000) +
stat_function(fun = curve, args = list(a = .a, b = .b, c = .c))
在我的真实数据中,我facet_grid
最后也有一个,因为还有两个分组。希望如果我们弄清楚这一点,一切都会体现在各个方面?
解决方案
首先。ggplot2
使用 a+
而不是 pipe %>%
。
实现所需结果的一种方法是循环使用数据框的行,例如purrr::pmap
制作stat_function
图层列表,然后可以将其添加到 ggplot 中,如下所示:
df <- data.frame(cohort = c("la", "la", "la", "li", "li", "li", "lo", "lo", "lo"),
rep = c(1, 2, 3, 1, 2, 3, 1, 2, 3),
coef_a = c(0.000000308, -0.000000179, -0.000000219, -0.000000195,
-0.000000179, -0.000000219, -0.000000195,-0.000000308, -0.000000179),
coef_b = c(-0.0168, 0.0112, 0.0126, 0.0119, 0.0112, 0.0126, 0.0119, -0.0168,
0.0112),
coef_c = c(437, 9.90, 1.56, 44.5, 9.90, 1.56, 44.5,437, 9.90))
curve <- function(x, a, b, c){a * x^2 + b * x + c}
library(purrr)
library(ggplot2)
library(dplyr)
layer_fun <- df %>%
filter(cohort == "la") %>%
pmap(function(...) {
args <- list(...)
stat_function(fun = curve, args = list(a = args$coef_a, b = args$coef_b, c = args$coef_c))
})
ggplot(df, aes(color = rep)) +
xlim(20000, 50000) +
layer_fun
由reprex 包于 2021-06-03 创建 (v2.0.0 )
推荐阅读
- php - 合并多个 woocommerce 我的帐户选项卡
- c++ - 如何确定两个优先于重载解析的隐式转换序列?
- android-edittext - Edittext的褪色底部
- elasticsearch - 弹性搜索 - 鹡鸰 - 地理距离
- python - 带有 Groupy Pandas 的循环移位(旋转行)数据框
- r - R中的Tobit回归,而循环回归我的数据没有使用censReg审查
- r - 使用 if else 语句翻译和删除操作
- php - PHP Laravel - 验证 webhook 签名
- java - 当我从图库中选择图像时应用程序崩溃
- git - 致命:遇到 AggregateException。远程:没有匿名写访问。致命:身份验证失败