一个小面包裹,鳞片自由,森林情节

时间:2016-06-03 17:26:58

标签: r ggplot2 facet-wrap

我正在尝试使用R中的小平面生成森林图,其中y轴没有比例。但是我遇到了麻烦。

这是我的示例数据:

set.seed(1)
df <- data.frame(y=rnorm(10),x=c(1:5,1:3,1:2),group=c(rep("a",5),rep("b",3),rep("c",2)),name=c(paste("a",1:5,sep=""),paste("b",1:3,sep=""),paste("c",1:2,sep="")))
df$ymin <- df$y-runif(10,0.5,0.7)
df$ymax <- df$y+runif(10,0.5,0.7)

如果我使用:

p <- ggplot(df,aes(y=y,x=x,ymin=ymin,ymax=ymax))+geom_point()+coord_flip()+scale_y_discrete(limits=df$name)+facet_wrap(~group,ncol=3,scales="free")+geom_vline(lty=2,aes(xintercept=0,colour="black"))

我收到错误:

Error in facet_render.wrap(plot$facet, panel, plot$coordinates, theme,  : 
  ggplot2 does not currently support free scales with a non-cartesian coord or coord_flip.

已在SO上讨论过。

尝试通过手动翻转轴来解决它因此丢弃flip_coord()部分,几乎可以正常工作 - 我没有得到错误栏:

p <- ggplot(df,aes(y=x,x=y,xmin=ymin,xmax=ymax))+geom_point()+scale_y_discrete(limits=df$name)+facet_wrap(~group,ncol=3,scales="free")+geom_vline(lty=2,aes(xintercept=0,colour="black"))

enter image description here

所以我的问题是如何在那里获得错误栏? 此外,现在y轴不会在底部和顶部点之上留下足够的空间。如何为每一端添加一点,以便点不像现在那样被切断?

1 个答案:

答案 0 :(得分:2)

这是怎么回事?

我们可以使用geom_segment并将y坐标设为name

p1 <- ggplot(df,aes(y = name, x = y))+
geom_point()+
facet_wrap(~group,ncol=3,scales="free")+
geom_segment(aes(x = ymin, xend = ymax, yend = name))+
geom_vline(lty=2, aes(xintercept=0), colour = 'red')

p1

enter image description here