Конкретные промежутки между столбцами в гистограмме — ggplot2 — R

У меня есть простая гистограмма, подобная следующей

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, но кажется, что это не так. Любые идеи ?


person Alex Karvouniaris    schedule 07.05.2015    source источник
comment
Хорошие ответы ниже. Еще один подход состоит в том, чтобы покрасить столбцы, которые вы хотите различать, установив коэффициент для их цвета заливки. Например, мужской и женский пол будут в факторе, работающие и неработающие будут заняты и т. д., и тогда заполнение = фактор будет служить для разделения столбчатых кластеров.   -  person lawyeR    schedule 07.05.2015


Ответы (3)


Я не знаю, как установить разные расстояния между стержнями в барплоте. Однако вы можете добавить столбцы с нулевой высотой и без метки между группами следующим образом:

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 используется для подавления меток и делений.

Результат выглядит следующим образом: введите здесь описание изображения

person Stibu    schedule 07.05.2015
comment
спасибо за ваш ответ и ваш отзыв. Ваш способ решения проблемы смешной и эффективный. - person Alex Karvouniaris; 07.05.2015

Если вы указываете scale_x_discrete (или y), вы можете просто добавить «» везде, где вы хотите, чтобы пробел появлялся в операторах limit и labels. Это похоже на первый ответ, но вам не нужно добавлять нулевые значения в свой набор данных.

например В этом наборе данных всего 8 баров, но они сгруппированы в две группы по четыре.

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

person MCarson    schedule 04.05.2016

person    schedule
comment
Я не знаю, работает ли это для вас, но это не дает ожидаемого результата для меня. - person Alex Karvouniaris; 07.05.2015