Две горизонтальные гистограммы с общей осью в ggplot2 (аналогично пирамиде населения)

Я хочу построить две переменные на одном графике, похожем на популяционную пирамиду, похожую на эту:

Этот сюжетпочти там, но не совсем, по причинам, которые я перечислю ниже.

Я создал этот сюжет со следующим кодом:

DATA <- data.frame(
    state = c("AK", "TX", "CA", "MT", "NM", "AZ", "NV", "CO", "OR", "WY", "MI", "MN", "UT", "ID", "KS", "NE", "SD", "WA", "ND", "OK"),
    sales_staff = c(20,30,40,10,15,35,18,25,22,7,12,22,3,4,5,8,14,28,24,32)
)

set.seed(1)
DATA$sales <- DATA$sales_staff * 50 + (runif(nrow(DATA)) * 1000)

# Order the state factor by number of sales staff so that it is plotted in that order
DATA$state <- factor(DATA$state, levels = DATA[order(DATA$sales_staff),"state"])

Я хочу «склеить» два графика друг за другом, поэтому я дословно использую функцию multiplot () изhttp://www.cookbook-r.com/Graphs/Multiple_graphs_on_one_page_%28ggplot2%29/

(Я не буду воспроизводить код этой функции здесь для краткости и ясности)

Мой код для финального сюжета:

library(ggplot2)

g1 <- ggplot(data = DATA, aes(x = state, y = sales_staff)) +
  geom_bar(stat = "identity") + ggtitle("Number of sales staff") +
  theme(axis.title.x = element_blank(), axis.title.y = element_blank(), axis.text.y = element_blank(), axis.ticks.y = element_blank(), plot.margin = unit(c(1,0,1,0), "mm")) +
  scale_y_reverse() + coord_flip()

g2 <- ggplot(data = DATA, aes(x = state, y = sales)) +
  geom_bar(stat = "identity") + ggtitle("Sales (x $1000)") +
  theme(axis.title.x = element_blank(), axis.title.y = element_blank(), plot.margin = unit(c(1,5,1,0), "mm")) +
  coord_flip()

multiplot(g1, g2, cols = 2)

ХОРОШО. Так что не так с этим сюжетом?

Мне нужно сделать отметки на правой оси левого графика. Я не могу понять, как это сделать.Два участка имеют разную ширину. Это связано с тем, что состояния внизу в середине являются метками оси на правом графике и используют часть пространства для этого графика.

Я столкнулся с кирпичной стеной, доведя этот участок до «качества производства». Я начинаю задумываться, поступаю ли я неправильно, потому что думаю, что следующим шагом будет нарисовать метки оси в виде отдельного третьего столбца между двумя графиками. (Я пока не знаю, как это сделать). Это решит проблему «равного размера» и позволит мне добавить «государственный» заголовок, так что это все еще может быть путь. Но я просто не могу не задаться вопросом, есть ли более простой способ ...

Любой совет или помощь приветствуются!

Ответы на вопрос(1)

Ваш ответ на вопрос