ggplot2:将轴连接到点的线

And*_*lor 5 r ggplot2

数据:

df<-data.frame(grp=letters[1:4],perc=runif(4))
Run Code Online (Sandbox Code Playgroud)

第一个选项:

首先,为每个组创建包含零的第二个数据集

df2<-rbind(df,data.frame(grp=df[,1],perc=c(0,0,0,0)))
Run Code Online (Sandbox Code Playgroud)

然后用geom_points和绘图geom_line

ggplot(df,aes(y=perc,x=grp))+
  geom_point()+
  geom_line(data=df2, aes(y=perc, x=grp))+
  coord_flip()
Run Code Online (Sandbox Code Playgroud)

太多工作_看起来不错

这看起来很好。创建第二个数据集的额外工作太多了。

另一个选项是使用 geom_bar 并使宽度变小:

ggplot(df,aes(y=perc,x=grp))+
  geom_point()+
  geom_bar(stat="identity",width=.01)+
  coord_flip()
Run Code Online (Sandbox Code Playgroud)

WeirdThinBars_NotSameSizeinPDF

但这也很奇怪,当我保存到 .pdf 时,并非所有的条都具有相同的宽度。

显然必须有一种更简单的方法来做到这一点,有什么建议吗?

ton*_*nov 5

使用geom_segment固定yend = 0。您还需要expand_limits调整绘图区域:

ggplot(df, aes(y=perc, x=grp)) +
    geom_point() +
    geom_segment(aes(xend=grp), yend=0) +
    expand_limits(y=0) +
    coord_flip()
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明