2013-05-17 20 views
12

In R habe ich einen data.frame wie der oben auf dem Bild.Erzeuge Barplot von data.frame

Gibt es eine Möglichkeit, ein Barplot wie das unten auf dem Bild zu erstellen?

enter image description here

+0

Wenn Sie eine Ascii-Ausgabe meinen, versuchen Sie das 'txtplot'-Paket. –

+0

Entschuldigung, dies war nur ein Beispiel;) Ich möchte eine Handlung wie die mit der Barplot-Funktion haben – ElPatzo

+0

Wahrscheinlich möchten Sie den Titel Ihrer Frage ändern? Sie möchten eigentlich ein Barplot aus einem data.frame erstellen und nicht umgekehrt. – Beasterfield

Antwort

19

Mit Basis Grafiken Sie dies einfach tun:

mydf <- data.frame(X1=c(A=2, B=4, C=1), X2=c(3,2,NA), X3=c(4,1,NA)) 
barplot(t(as.matrix(mydf)), beside=TRUE) 

Mit weiteren Anrufe axis kann die Kennzeichnung mehr geben wie in der Frage.

+2

Dies sollte die akzeptierte Antwort sein - warum zwei Bibliotheken verwenden, um so eine einfache Aufgabe zu erledigen? –

+0

weil die Konvertierung in eine Matrix und dann eine Tabelle viel Aufwand verursachen kann, wenn Sie ein großes df haben? – wordsforthewise

+0

@wordsforthewise, wenn der df so groß ist, dass dieser Overhead sogar bemerkbar ist (geschweige denn ein Problem), dann ist ein Barplot wahrscheinlich sowieso nicht die beste Visualisierung davon. –

14

Unter der Annahme, dass Sie nicht ascii Ausgang wollen, hier ist eine Lösung mit ggplot2:

# load/generate your data 
mydf <- data.frame(X1 = c(2,4,1), X2 = c(3,2,NA), x3 = c(4,1,NA), row.names=c("A","B","C")) 
mydf$Category <- row.names(mydf) 

# bring your data to long format as needed by ggplot 
library(reshape2) 
mydf.molten <- melt(mydf, value.name="Count", variable.name="Variable", na.rm=TRUE) 

# plot and facet by categories 
library(ggplot2) 
qplot(data=mydf.molten, x = Variable, y = Count, geom="bar", stat = "identity") + facet_wrap("Category") 

enter image description here

Weitere Details Ich würde empfehlen, die zu konsultieren ggplot2 manual, vor allem das Kapitel über geom_bar und facet_wrap.

+0

Arbeitete für mich! Vielen Dank! – ElPatzo

+0

hat diesen Fehler mit Ihrem Code: '> mydf.molten <- schmelzen (mydf, value.name =" Anzahl ", variable.name =" Variable ", na.rm = TRUE) Verwenden Kategorie als ID-Variablen > qplot (Daten = mydf.molten, x = Variable, y = Anzahl, geom = "bar", stat = "Identität") + facet_wrap ("Kategorie") Fehler: stat_count() darf nicht mit ay aesthetic verwendet werden. Zusätzlich: Warnmeldung: 'stat' ist veraltet' –

+0

@Mona Jalal; 'ggplot2' hat sich seit 2013 geändert, besonders als es von ver aktualisiert wurde. 1.xxx bis 2.xxx. – cuttlefish44