Обернутая грань, без чешуи, лесной участок

Я пытаюсь создать лесной участок с гранями в 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"))

введите здесь описание изображения

Итак, мой вопрос: как мне получить панель ошибок? Кроме того, прямо сейчас оси Y не оставляют достаточно места ниже нижней и над верхней точками. Как добавить по биту с каждого конца, чтобы точки не обрезались, как сейчас?


person dan    schedule 03.06.2016    source источник


Ответы (1)


Как это?

Мы можем использовать 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

введите здесь описание изображения

person bouncyball    schedule 03.06.2016