r - ggplot 扩展函数在散点图中绘制叠加均值
问题描述
我正在尝试创建一个扩展 ggplot2 的自定义函数。该函数的目标是将平均值与水平和垂直标准误差叠加。下面的代码完成了整个事情。
library(plyr)
library(tidyverse)
summ <- ddply(mtcars,.(),summarise,
dratSE = sqrt(var(drat))/length(drat),
mpgSE = sqrt(var(mpg))/length(mpg),
drat = mean(drat),
mpg = mean(mpg))
ggplot(data = mtcars, mapping = aes(x = drat, y = mpg)) +
geom_point(shape = 21, fill = 'black', color = 'white', size = 3) +
geom_errorbarh(data = summ, aes(xmin = drat - dratSE, xmax = drat + dratSE)) +
geom_errorbar(data = summ, aes(ymin = mpg - mpgSE, ymax = mpg+mpgSE), width = .1) +
geom_point(data = summ, color='red',size=4)
理想情况下,它只需要一个函数geom_scattermeans()
来完成整个事情。但我不确定美学是如何geom
从ggplot()
.
解决方案
我认为plyr
在这一点上已经不复存在了。我会推荐这个dplyr
包。与您一起编程时,dplyr
可以使用{{
(curly-curly,或文档中所说的 embracing )来正确引用表达式。
library(ggplot2)
library(dplyr)
#>
#> Attaching package: 'dplyr'
#> The following objects are masked from 'package:stats':
#>
#> filter, lag
#> The following objects are masked from 'package:base':
#>
#> intersect, setdiff, setequal, union
geom_point_error <- function(data, x, y, color = 'red', size = 4) {
data <- dplyr::summarise(
data,
x_se = sqrt(var({{x}}))/length({{x}}),
y_se = sqrt(var({{y}}))/length({{y}}),
x = mean({{x}}),
y = mean({{y}})
)
list(
geom_errorbarh(data = data,
mapping = aes(y = y,
xmin = x - x_se, xmax = x + x_se), inherit.aes = F),
geom_errorbar(data = data,
mapping = aes(x = x,
ymin = y - y_se, ymax = y + y_se), width = .1,inherit.aes = F),
geom_point(data = data,
mapping = aes(x = x, y = y),
color = color, size = size)
)
}
ggplot(data = mtcars, mapping = aes(x = drat, y = mpg)) +
geom_point(shape = 21, fill = 'black', color = 'white', size = 3) +
geom_point_error(mtcars, x = drat, y = mpg)
由reprex 包于 2021-05-17 创建(v1.0.0)
第二种选择是构建您自己的ggproto
Geom
内部来处理这些计算ggplot2
,但目前这有点多。
推荐阅读
- azure-cosmosdb - 使用 BulkImport 处理 DocumentClientException
- django - Django Form 不断渲染
- html - 使用 flex 在可滚动屏幕上保持固定页脚
- xcode - 为什么 AppDelegate 文件看不到 GameAnalytics 文件?
- java - W/audio_hw_generic:pcm_read 失败无法读取流数据:I/O 错误
- cordova - 托管 webapp 中的科尔多瓦插件 twilio_client_phonegap :科尔多瓦
- java - 如果 Web 服务关闭,如何重试?
- python - 列表理解中的 Python 嵌套循环和 Else 子句
- postman - 尝试在 Slack 中获取用户列表时如何修复错误
- r - 任何有效的方法来标记 R 中 3D 图中前 3 个 PCA 的数据点?