条形图中条之间的特定间距 - ggplot2 - R

6

我有一个简单的条形图,如下所示

a<-data.frame(x=c("total","male","female","low education",
            "mid education","high education","working","not working"),
        y=c(80,30,50,20,40,20,65,35))
a$x<-as.character(a$x)
a$x<-factor(a$x,levels=unique(a$x))


ggplot(a,aes(x,y)) + 
geom_bar(stat="identity",fill="orange",width=0.4) +
coord_flip() +
theme_bw()

现在,由于x轴的级别(翻转并且现在看起来像y)彼此有关系,例如男性和女性代表性别分布,工作和非工作代表另一种分布等,我希望轴在每个分布之间留下一些空间以指出这些分布。 我尝试了一些关于scale_x_discrete及其参数break的操作,但似乎这不是正确的方式。 有什么想法吗?

1
下面有很好的答案。另一种方法是通过设置填充颜色的因子来区分所需的条形图。例如,男性和女性将成为因子中的性别,工作和非工作将成为就业状态等,然后使用fill = factor将有助于区分条形图簇。 - lawyeR
3个回答

8

我不知道如何在条形图中设置不同的条之间的距离。 但是,您可以按照以下方式在组之间添加高度为0且没有标签的条:

a<-data.frame(x=c("total","a","male","female","b","low education",
                  "mid education","high education","c","working","not working"),
              y=c(80,0,30,50,0,20,40,20,0,65,35))
a$x<-factor(a$x,levels=unique(a$x))


ggplot(a,aes(x,y)) + 
   geom_bar(stat="identity",fill="orange",width=0.4) +
   coord_flip() +
   theme_bw() +
   scale_x_discrete(breaks=a$x[nchar(as.character(a$x))!=1])

一些备注:

  • a$x 是起始字符,因此不需要调用 as.character
  • 只有每个“空”条都有不同的标签,它才能正常工作。这就是我选择三个不同字母的原因。
  • scale_x_discrete 用于抑制标签和刻度线。

结果如下图所示:enter image description here


谢谢你的回答和反馈。你解决问题的方式既有趣又高效。 - Alex Karvouniaris

2
a<-data.frame(x=c("total","male","female","low education","mid education","high education","working","not working"),y=c(80,30,50,20,40,20,65,35))
a$x<-as.character(a$x)
a$x<-factor(a$x,levels=unique(a$x))

a$rel = c("a", "a", "a", "b", "b", "b", "c", "c") # set groups
ggplot(a, aes(rel, y, fill = factor(x))) + 
  geom_bar(stat = "identity", width = 0.5, position = position_dodge(0.7))

我不知道它是否适用于你,但对我来说它没有产生预期的结果。 - Alex Karvouniaris

0

如果您正在指定scale_x_discrete(或y),您可以在限制和标签语句中的任何位置添加"",以便出现空格。这类似于第一个答案,但您不必将零值添加到数据集中。

例如,此数据集仅有8个条形图,但它们分为两组四个。

scale_x_discrete( limits=c("BMayC","UMayC","BMayN","UMayN","","BJuneC","UJuneC","BJuneN","UJuneN"), labels=c("BMayC","UMayC", "BMayN","UMayN","","BJuneC","UJuneC","BJuneN","UJuneN"))


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接