гистограмма с именованными группами по оси x в ggplot2?

#r #ggplot2 #bar-chart

Вопрос:

он хочет создать сюжет такого типа в ggplot, но не может заставить его работать (сделано в excel):

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

Так что на оси x есть города, но они расположены в соответствии с тем, в каком состоянии они находятся. Цвет каждого бара основан на каком-то третьем свойстве, например, размере города (большого, малого или среднего), а ось y-это измерение чего угодно! Легенда (большая, маленькая, средняя) должна быть включена, просто ее нет на рисунке, который я вставил сюда.

Примеры данных:

 state <- c(rep("Texas",3),rep("Colorado",3),rep("Nevada",3))
city <- c("Houston","Austin","Dallas","Denver","Boulder","Aspen","Reno","Sparks","Henderson")
size <- c(rep(c("large","medium","small"),3))
value <- runif(9, 10,50)
df <- data.frame(state,city,size, value)

 

До сих пор я делал это:

 plot <- ggplot(df, aes(x=State, y=value))   
  geom_bar(aes(fill=size),position = "dodge", stat = "identity", color="black")
plot
 

Но тогда каждый бар не помечен названием города.
Есть какие-нибудь идеи?

Ответ №1:

Ответ

(Заслуга https://dmitrijskass.netlify.app/2019/06/30/multi-level-labels-with-ggplot2/ )

Воспользуйся facet_grid :

 ggplot(df, aes(x=city, y = value))   
  geom_col()  
  facet_grid(~ state, 
             scales = "free_x",
             space = "free_x",
             switch = "x")
 

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

Более полная версия

 ggplot(df, aes(x=city, y = value))   
  geom_col()  
  facet_grid(~ state, 
             scales = "free_x",
             space = "free_x",
             switch = "x")  
  theme(panel.spacing = unit(0, units = "cm"), # removes space between panels
        strip.placement = "outside", # moves the states down
        strip.background = element_rect(fill = "white") # removes the background from the state names
 

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