Zwei horizontale Balkendiagramme mit gemeinsamer Achse in ggplot2 (ähnlich Bevölkerungspyramide)
Ich möchte plot zwei Variablen auf einem Grundstück ähnlich einer Bevölkerungspyramide, die ähnlich dieser:
Dieses Grundstück ist fast es aber nicht ganz aus den Gründen, die ich Liste unten.
Produzierte ich diese Darstellung mit dem folgenden code:
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"])
Möchte ich "kleben" zwei Grundstücke back-to-back, so dass ich die multiplot () - Funktion wörtlich aus http://www.cookbook-r.com/Graphs/Multiple_graphs_on_one_page_%28ggplot2%29/
(Die ich nicht reproduzieren, der code für die Funktion hier für Kürze und Klarheit)
Mein code für die Letzte Handlung ist:
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)
OK. Also, was ist falsch mit dieser Handlung?
- Ich brauche, um die Häkchen auf der rechten Achse von der linken plot. Ich kann nicht herausfinden, wie das zu tun.
- Die beiden Parzellen sind in unterschiedlichen breiten. Dies ist, weil die Staaten in der Mitte, sind die Achsen-Beschriftungen aus der rechten plot und einige der Raum für das Grundstück.
Den ich getroffen habe, eine Mauer zu bekommen, diese Handlung zu "Produktion und Qualität". Ich fange an zu Fragen, wenn ich werde über diese in die falsche Richtung, denn ich denke der nächste Schritt wird sein, zu zeichnen, die Achsen-Beschriftungen als separate Dritte Spalte zwischen den beiden plots. (Ich weiß aber noch nicht, wie Sie dies tun). Diese lösen die "gleiche Größe" Thema und erlauben Sie mir noch ein "state" - Titel, also es kann noch immer der Weg zu gehen. Aber ich kann mir nicht helfen, aber Frage mich, ob es einen einfacheren Weg...
Jeden Rat oder Hilfe dankbar!
- Können Sie passen Sie stackoverflow.com/questions/14680075/... für Ihre Zwecke?
- Ich bin eine eingefleischte
ggplot2
fan und das Paket für absolut alles, was ich kann, aber wenn ich die erforderlich sind, um eine Pyramide plot ähnlich wie der vor ein paar Monaten habe ich schließlich aufgegeben und verwendetpyramid.plot
von derplotrix
Paket. Nein, ich wusste nicht, wie die syntax, aber es war nicht schwer und ich habe bessere Ergebnisse als mitggplot2
und mit viel weniger Gefummel. - Sie sollten die Suche nach "Rücken an Rücken charts".
- mögliche Duplikate von Zeichnung Pyramide plot mit R und ggplot2
- Es ist ein vor kurzem Hinzugefügt, hervorragende demonstration, wie man die Feinabstimmung eines
ggplot2
back-to-back-bar-chart: stackoverflow.com/a/37374271/3817004
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier ist sehr lange Problemumgehung für Ihr Grundstück. Idee ist, erstellen Sie neue Zeichnung enthält nur die Status-Namen und Zecken auf beiden Seiten und verwenden Sie diese als der mittlere plot.
Für dieses Grundstück habe ich Hinzugefügt, Titel-ohne Namen zu bekommen und Raum
ylab(NULL)
um Speicherplatz zu entfernen. Für den linken und rechten Rand Werte sind -1 zu erhalten Handlung näher an andere Grundstücke. Bibliothekgrid
sollte Hinzugefügt werden, bevor Sie Plotten die Funktionunit()
für den plot Margen.Sowohl original-plots geändert werden. Erste, entfernt die y-Achse für die zweite Handlung und auch aus der linken/rechten Rand auf -1.
Nun verwenden, Bibliothek
gridExtra
und Funktion dgrid.arrange()
beitreten Grundstücke. Vor dem zeichnen alle Grundstücke gemacht werden, wie grobs.gridExtra
Bibliothek, bevor Sie Sie erstelleng.mid
weil dieunit
Funktion kommt aus dergrid
Paket.axis
?