使用带有geom_pointrange的position_dodge

Giu*_*ino 6 r ggplot2

我正在尝试使用ggplot,geom_poitrange绘制图形。我有两组,每组有两个点和相应的误差值。我使用的代码如下:

    group<-c("A","A","B","B")
    val<-c(1.3,1.4, 1.2,1.5)
    SD<-c(0.3,0.8,0.6,0.5)
    RX<-c("X","Z","X","Z")

    a<-data.frame(group,val,SD,RX)
    ggplot(data=a)+
    geom_pointrange(aes(x=RX, y=val, ymin=(val-SD), ymax=(val + SD), 
    group=group, color=group, position_dodge(width=4)), size=1.5)
Run Code Online (Sandbox Code Playgroud)

有了这个,我得到一个漂亮的图,但是组重叠了。 在此处输入图片说明

我想抵消他们。我尝试了以下方法:

    geom_pointrange(aes(x=RX, y=val, ymin=(val-SD), ymax=(val + SD), 
    group=group, color=group, position_dodge(width=1)), size=1.5)
Run Code Online (Sandbox Code Playgroud)

要么

    geom_pointrange(aes(x=RX, y=val, ymin=(val-SD), ymax=(val + SD), 
    group=group, color=group, position="dodge"), size=1.5)
Run Code Online (Sandbox Code Playgroud)

和以上的变化。谁能暗示我在做什么错?谢谢

Ari*_*eld 7

OP 提供了两种可能的解决方案。第一个解决方案使用position_dodge()接近的函数。问题是它在参数列表中的位置错误(不是因为宽度太大)。

position = position_dodge(width = 1)在之后明确指定aes()

ggplot(data=a) +     
geom_pointrange(aes(x=RX, y=val, ymin=(val-SD), max=(val + SD), 
                                       group=group, color=group), 
position = position_dodge(width = 1), size=1.5)
Run Code Online (Sandbox Code Playgroud)

查看 help 中的 API ?geom_pointrange(),您会看到位置在 mapping、data 和 stat 之后。如上所示,这里最简单的事情是明确的。否则,您将收到如下错误或警告:

Warning: Ignoring unknown aesthetics 
Run Code Online (Sandbox Code Playgroud)

或者

Error: `data` must be a data frame, or other object coercible by `fortify()`, not an S3 object with class PositionDodge/Position/ggproto/gg
Run Code Online (Sandbox Code Playgroud)

为什么不position="dodge"呢?

如果您尝试第二种解决方案,您将收到一条警告,告诉您尝试第一种解决方案:

Warning message:
Width not defined. Set with `position_dodge(width = ?)` 
Run Code Online (Sandbox Code Playgroud)

据我所知,躲避是为条形图和箱形图编写的,并使用width这些对象的固有特性。线条没有宽度,因此您需要明确指定应该发生多少闪避。