R ggplot扩展函数,用于在散点图中绘制叠加平均值

R ggplot扩展函数,用于在散点图中绘制叠加平均值,r,ggplot2,plyr,ggproto,R,Ggplot2,Plyr,Ggproto,我正在尝试创建一个扩展ggplot2的自定义函数。该函数的目标是将平均值与水平和垂直标准误差叠加。下面的代码完成了全部工作 library(plyr) library(tidyverse) summ <- ddply(mtcars,.(),summarise, dratSE = sqrt(var(drat))/length(drat), mpgSE = sqrt(var(mpg))/length(mpg),

我正在尝试创建一个扩展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) 

库(plyr)
图书馆(tidyverse)

summ我认为在这一点上,
plyr
已经不存在了。我建议使用
dplyr
软件包。当使用
dplyr
编程时,您可以使用
{{
(curly-curly或including作为)正确引用表达式

库(ggplot2)
图书馆(dplyr)
#> 
#>正在附加包:“dplyr”
#>以下对象已从“package:stats”屏蔽:
#> 
#>滤波器,滞后
#>以下对象已从“package:base”屏蔽:
#> 
#>相交、setdiff、setequal、并集

geom_point_error我认为
plyr
在这一点上已经不存在了。我建议使用
dplyr
包。当使用
dplyr
编程时,可以使用
{
(curly-curly,或enballing)正确引用表达式

库(ggplot2)
图书馆(dplyr)
#> 
#>正在附加包:“dplyr”
#>以下对象已从“package:stats”屏蔽:
#> 
#>滤波器,滞后
#>以下对象已从“package:base”屏蔽:
#> 
#>相交、setdiff、setequal、并集

几何点误差因为我的第一个答案仍然是比较简单的答案,所以我决定保留它。这个答案应该更接近他们的目标

构建ggproto对象可能会很麻烦,具体取决于您尝试执行的操作。在您的情况下,您将3个
ggproto
Geoms
类与新的
Stat
类组合在一起

这三个几何图形是:

  • GeomErrorbar
  • GeomErrorbarh
  • GeomPoint
开始时,有时您只需要从其中一个类继承并覆盖该方法,但要将这三个类合并在一起,您需要做更多的工作

让我们先考虑一下这些<代码> GeOMs/COD>绘制它们的<代码>网格< /COD>对象。根据<代码> GeOM <代码>,这些函数中有一个函数<代码> DraceLayle()/<代码>,<代码> DRAPH PANELL()/<代码>,和<代码>拖拽组()/代码>。幸运的是,我们所要使用的每一个GEMS只使用“代码>拖拉面板”()

这意味着我们的工作量会少一点-我们将直接调用这些方法,并构建一个新的
grobTree
对象。我们只需要小心,所有正确的参数都会进入我们新的
Geom
draw\u panel()
方法

<>在编写自己的<代码>绘制面板< /代码>之前,我们首先要考虑<代码> StupUpPARAMSH()/<代码>和<代码> StuuPuxDATA()
函数。有时,这些函数会直接修改数据。这些步骤通常有助于这里的自动处理,并经常用于标准化/转换数据。一个很好的例子是
GeomTile
GeomRect
,它们本质上是相同的
Geom
s,但它们的
设置数据()
函数不同,因为它们的参数化方式不同

假设您只想分配一个
x
和一个
y
,并将
xmin
ymin
xmax
ymax
的计算留给geoms/stats

幸运的是,
geomerpoint
只返回数据,不做任何修改,因此我们需要合并
GeomErrorbar
GeomErrorbar
setup\u data()
首先,为了跳过一些步骤,我将创建一个新的
Stat
,它将负责在
compute\u group()
方法中为我们转换这些值

此处的注释,
GeomErrorbar
GeomErrorbar
允许分别包含另一个参数-
width
height
,这两个参数控制错误条的平坦部分的宽度

此外,在这些函数中,每个函数都将生成自己的
xmin
xmax
ymin
ymax
——因此我们需要区分这些参数

首先将所需信息加载到命名空间中

库(ggplot2)
图书馆(网格)

“%||%”因为我的第一个答案仍然是比较简单的解决方案,所以我决定保留它。这个答案应该更接近他们的目标

构建ggproto对象可能会很麻烦,具体取决于您尝试执行的操作。在您的情况下,您将3个
ggproto
Geoms
类与新的
Stat
类组合在一起

这三个几何图形是:

  • GeomErrorbar
  • GeomErrorbarh
  • GeomPoint
开始时,有时您只需要从其中一个类继承并覆盖该方法,但要将这三个类合并在一起,您需要做更多的工作

让我们先考虑一下这些<代码> GeOMs/COD>绘制它们的<代码>网格< /COD>对象。根据<代码> GeOM <代码>,这些函数中有一个函数<代码> DraceLayle()/<代码>,<代码> DRAPH PANELL()/<代码>,和<代码>拖拽组()/代码>。幸运的是,我们所要使用的每一个GEMS只使用“代码>拖拉面板”()

这意味着我们的工作量会少一点-我们将直接调用这些方法,并构建一个新的
grobTree
对象。我们只需要小心,所有正确的参数都会进入我们新的
Geom
draw\u panel()
方法

<>在编写自己的<代码>绘制面板< /代码>之前,我们首先要考虑<代码> StupUpPARAMSH()/<代码>和<代码> StuuPuxDATA()
函数。有时,这些函数会直接修改数据。这些步骤通常有助于在此处进行自动处理,通常用于标准化/转换数据。一个很好的例子是
GeomTile
GeomRe