抵消相同类别的两个geom_points

时间:2016-05-12 02:26:22

标签: r ggplot2

我正在尝试绘制这些数据:

data(comp)

Habitat Used Available  SDU  SDA
1    Forest 63.2      85.1 32.0 12.8
2      Open 18.9       3.3 24.8  1.4
3      Edge 15.4       7.8 10.0  4.6
4   Wetland  2.5       1.2  6.1  3.5
5 Developed  0.0       3.5  0.0  6.7

使用此代码:

ggplot()+
  geom_point(data=comp,size=3,fill="white",shape=21,aes(x=Habitat,y=Available))+
  geom_errorbar(data=comp,aes(x=Habitat,ymin=Available-SDA,ymax=Available+SDA,width=.1))+

  geom_point(data=comp,size=3,fill="black",shape=21,aes(x=Habitat,y=Used))+
  geom_errorbar(data=comp,aes(x=Habitat,ymin=Used-SDU,ymax=Used+SDU,width=.1))+

  theme_classic()

这给了我这个 graph

出色!

但是,这些错误栏无法读取,因为它们重叠!如何偏移两个点(可能用于“左”和“可用”到右侧),以便我可以正确地看到每个错误栏?

我尝试过position_dodge和geom_jitter而不是geom_point,但是我无法让它们运行起来。我试过搜索,但我没有取得多大成功。

提前谢谢!

1 个答案:

答案 0 :(得分:1)

将您的数据转换为" long"格式,然后您可以将Used和Available映射到颜色美学。这样可以更容易区分它们,减少所需的代码量,并且可以轻松躲避它们(使用position_dodge()),这样它们就不会重叠:

library(reshape2)
library(ggplot2)

comp.m = melt(comp, id.var="Habitat")
comp.m = data.frame(comp.m[1:10,], err=comp.m[11:20,3])

pd = position_dodge(0.5)

ggplot(comp.m) +
  geom_point(aes(Habitat, value, color=variable), position=pd) +
  geom_errorbar(aes(Habitat, ymin=value - err, ymax=value + err,
                    color=variable), width=0.3, position=pd) +
  theme_classic() +
  labs(color="")

enter image description here