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!