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")
Bsp. Barplot.pdf
(83 KiB) 62-mal heruntergeladen

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 8-)
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 :shock: ? 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 :shock: ? 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 :lol: :

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