Seite 1 von 2
back-to-back Barplot
Verfasst: Di Dez 25, 2018 10:22 pm
von alex
Hallo zusammen und frohe Weihnachten!
ich bin seit Tagen am verzweifeln. Ich versuche mit R einen back-to-back Barplot zu entwerfen und schaffe es trotz intensiver Recherche nicht.
Letztendlich habe ich 2 Spalten, von denen ich gerne ein nach rechts und eine nach links plotten würde. Im angehängten Schaubild sind die Daten aus Spalte "A", nun soll nach rechts noch Balken der Zahlen aus Spalte "B". Kann mir jemand dafür eine passende Funktion verraten?
Code: Alles auswählen
library(ggplot2)
bp <- ggplot(data=tkd, aes(x=id, y=A))+
geom_bar(stat="identity")
print(bp) + coord_flip()
Code: Alles auswählen
tkd <- read.csv2(text=
"id; A; B
B201; 3350; 300
B202; 137; 140
B203; 300; 733
B204; 104; 91
B205; 1257; 4790
B206; 312; 627
B207; 3695; 13020")
Re: back-to-back Barplot
Verfasst: Fr Dez 28, 2018 3:10 pm
von ruedi_br
Da wirst Du auf das grid-System ausweichen müssen, das die Basis von ggplot2 ist (dem Aussehen nach benutzt Du das ja wohl).
Mit ggplot2 die Grafiken schnitzen und jeweils einer Variablen zuweisen, dann
device zur Ausgabe aufmachen, z.B. pdf
2 Viewports nebeneinander aufmachen und in jedem jeweils eine Grafik "print"en.
Vielleicht hat ja jemand noch eine passende Fundstelle dazu
Gruß
Ruedi
Re: back-to-back Barplot
Verfasst: Fr Dez 28, 2018 4:47 pm
von Athomas
Da wirst Du auf das grid-System ausweichen müssen, das die Basis von ggplot2 ist
Wat
? Wo hast Du das denn her?
Re: back-to-back Barplot
Verfasst: Mo Dez 31, 2018 7:33 am
von bigben
Re: back-to-back Barplot
Verfasst: Mi Jan 02, 2019 2:43 pm
von alex
Vielen Dank euch, für die Antworten!
Die Anleitungen für Alterspyramiden hab ich mir schon alle zu Gemüte geführt (ähnlich wie der 2. Link von bigben). Da ist die Tabelle aber immer anders strukturiert, es wird also nicht nach 2 Spalten geplottet, sondern nach 2 Variablen einer Spalte (männlich-weiblich) geordnet.
Im Zweifel könnte ich natürlich her gehen und meine Tabelle derart umbauen, aber das ist ziemlich mühsam und unpraktikabel bei großen Mastertabellen. Ich kann mir einfach nicht vorstellen, dass es keine Funktion bei R gibt, mit der man einfach sagen kann "Spalte A nach links und Spalte B nach rechts plotten".
Re: back-to-back Barplot
Verfasst: Mi Jan 02, 2019 4:15 pm
von Athomas
Zumindest ggplot2 liebt - wie EDi gerne sagt - das "lange" Datenformat.
Da die Daten häufig im "weiten" Format vorliegen, ist in R die Umwandlung (etwa per "melt" im package "reshape2") von "wide" auf "long" extrem einfach gestaltet...
Re: back-to-back Barplot
Verfasst: Do Jan 03, 2019 11:26 am
von bigben
Im Zweifel könnte ich natürlich her gehen und meine Tabelle derart umbauen
Im Zweifel lohnt sich der Aufwand, das zu lernen. Ich hab es schon 100 Mal gelernt.
Ich kann mir einfach nicht vorstellen, dass es keine Funktion bei R gibt, mit der man einfach sagen kann "Spalte A nach links und Spalte B nach rechts plotten"
Muss es denn ggplot2 sein?
Re: back-to-back Barplot
Verfasst: Do Jan 03, 2019 11:45 am
von ruedi_br
@Athomas
Wat
? Wo hast Du das denn her?
Paul Murrell, R Graphics, second Edition, Seite xii
Gruß Ruedi
Re: back-to-back Barplot
Verfasst: Do Jan 03, 2019 1:55 pm
von Athomas
@ruedi_br: Da ich das Buch nicht besitze, musste ich mir einen "Preview" anschauen, der leider keine Seitennummerierungen hatte.
Ich vermute, Du beziehst Dich auf diese Passage:
Both lattice and ggplot2 use grid to draw plots, but both can be used without directly encountering grid.
Ob man deswegen grid als "Basis" von ggplot2 bezeichnen sollte? Ich würde es nicht tun...
Re: back-to-back Barplot
Verfasst: Do Jan 03, 2019 2:08 pm
von Athomas
"Melten" in R ist kein Hexenwerk
:
Code: Alles auswählen
DF.wide <- data.frame(ID=LETTERS[1:10], matrix(runif(50), ncol=5, dimnames=list(NULL, letters[1:5])), stringsAsFactors=FALSE)
library(reshape2)
DF.long <- melt(DF.wide, id.vars="ID", variable.name="Spaltenname")