Dwa poziome wykresy słupkowe ze wspólną osią w ggplot2 (podobne do piramidy populacji)

Chcę narysować dwie zmienne na jednym wykresie podobnym do piramidy populacji podobnej do tej:

Ta fabuła jestprawie tam, ale nie całkiem, z powodów, które wymienię poniżej.

Wyprodukowałem tę fabułę z następującym kodem:

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"])

Chcę „przykleić” dwa wątki do siebie, więc używam funkcji multiplot () dosłownie zhttp://www.cookbook-r.com/Graphs/Multiple_graphs_on_one_page_%28ggplot2%29/

(Nie będę tutaj odtwarzać kodu tej funkcji dla zwięzłości i jasności)

Mój kod ostatecznej fabuły to:

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)

DOBRZE. Więc co jest nie tak z tą fabułą?

Muszę zdobyć znaczniki na prawej osi lewego wykresu. Nie wiem, jak to zrobić.Dwie wykresy mają różne szerokości. Dzieje się tak, ponieważ stany w środku są etykietami osi z prawego wykresu i wykorzystują część przestrzeni dla tego wykresu.

Uderzyłem w ścianę z cegły, aby uzyskać tę fabułę „jakości produkcji”. Zaczynam się zastanawiać, czy nie zajmuję się tym w niewłaściwy sposób, ponieważ myślę, że następnym krokiem będzie narysowanie etykiet osi jako oddzielnej trzeciej kolumny między dwoma wykresami. (Nie wiem jeszcze, jak to zrobić). To rozwiąże problem „równych rozmiarów” i pozwoli mi dodać tytuł „państwowy”, więc może nadal być dobry sposób. Ale nie mogę się powstrzymać od zastanowienia, czy istnieje prostszy sposób ...

Wszelkie porady lub pomoc mile widziane!

questionAnswers(1)

yourAnswerToTheQuestion