我正在尝试使用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)
有了这个我获得了一个漂亮的图表,但这些组重叠。 enter image description here
我想要抵消它们。我尝试了以下方法:
geom_pointrange(aes(x=RX, y=val, ymin=(val-SD), ymax=(val + SD),
group=group, color=group, position_dodge(width=1)), size=1.5)
或
geom_pointrange(aes(x=RX, y=val, ymin=(val-SD), ymax=(val + SD),
group=group, color=group, position="dodge"), size=1.5)
以及上述的变化。 任何人都可以建议我做错了什么? 感谢
答案 0 :(得分:2)
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)
在帮助?geom_pointrange()
中检查API,您会发现该位置位于映射,数据和统计之后。如上所示,此处最简单的操作是明确的。否则,您将收到错误或警告,例如:
Warning: Ignoring unknown aesthetics
或
Error: `data` must be a data frame, or other object coercible by `fortify()`, not an S3 object with class PositionDodge/Position/ggproto/gg
position="dodge"
?如果尝试第二种解决方案,则会收到警告,提示您尝试第一种解决方案:
Warning message:
Width not defined. Set with `position_dodge(width = ?)`
据我了解,闪避是针对条形图和箱形图编写的,并使用这些对象固有的width
。线没有宽度,因此您需要明确指定应该进行多少躲避。