Упорядочение графиков частоты geom_bar по нескольким факторам - PullRequest
0 голосов
/ 09 марта 2020

Я создаю гистограмму для отображения количества ответов на опрос в каждом округе, и я хочу сгруппировать ответы по округам и регионам. Мои данные выглядят так:

head(df)
# A tibble: 6 x 4
  responseid region     county      industry             
       <dbl> <fct>      <fct>       <chr>                
1        137 West Coast Los Angeles Construction         
2        138 West Coast San Diego   Energy               
3        139 West Coast Orange      Professional Services
4        140 East Coast Queens      Restaurants          
5        144 West Coast San Diego   Energy               
6        145 East Coast Miami-Dade  Public Sector    

Я использую этот код:

ggplot(df, mapping = aes(x = fct_rev(fct_infreq(county)), y = stat(count))) +
  geom_bar(aes(fill = region)) + 
  coord_flip()+
  scale_y_continuous() +
  ggtitle("Responses by County") +
  ylab("Number of Responses")+
  xlab("County") + 
  labs(fill = "Region") +
  geom_text(stat='count', aes(label=..count..), vjust = .5, hjust = -1)

, который генерирует этот график: plot of response county by county, colored by region

Участок упорядочен по частоте ответов по округам. Я бы хотел, чтобы он был упорядочен сначала по регионам, а затем по количеству ответов. Я хочу эту же диаграмму, но со всеми округами Западного побережья по порядку от большинства к наименьшим ответам, а затем округами Восточного побережья по порядку от большинства к наименьшим ответам. , поскольку он тянет ответы Западного побережья в отдельную сетку, и вы не можете сравнивать все графства по одной и той же оси y; огранка без переворачивания оси приводит к тому, что названия округов перекрываются и становятся неразборчивыми.

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

ggplot(df, mapping = aes(x = fct_rev(fct_infreq(county)), y = stat(count), group = interaction(region, county))) +
  geom_bar(aes(fill = region)) + 
  coord_flip()+
  scale_y_continuous() +
  ggtitle("Responses by County") +
  ylab("Number of Responses")+
  xlab("County") + 
  labs(fill = "Region") +
  geom_text(stat='count', aes(label=..count..), vjust = .5, hjust = -1)

Редактировать: Вот как это выглядит с переносом фасет. Я не фанат, потому что сложнее визуально сравнивать бары, когда они не начинаются с одной и той же оси Y: enter image description here

Если вы удалитеordin_flip, все бары начинаются с того же места, но тогда вы вообще не можете прочитать названия округов. enter image description here

1 Ответ

2 голосов
/ 09 марта 2020

Я добавил следующие две строки к исходному графику, чтобы получить желаемый результат. Спасибо всем, кто выручил!

facet_grid(region ~ ., scales = "free_y", space = "free") +
  theme(strip.background = element_blank(), strip.text = element_blank())

enter image description here

...