R ggplot扩展函数,用于在散点图中绘制叠加平均值
我正在尝试创建一个扩展ggplot2的自定义函数。该函数的目标是将平均值与水平和垂直标准误差叠加。下面的代码完成了全部工作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),
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