2012-04-18 3 views
5

Ich habe folgende DatenErstellen gruppiert bar-plot der mehrspaltigen Daten in R

 Input Rtime Rcost Rsolutions Btime Bcost 
1 12 proc.  1 36  614425  40 36 
2 15 proc.  1 51  534037  50 51 
3 18-proc  5 62 1843820  66 66 
4 20-proc  4 68 1645581 104400 73 
5 20-proc(l)  4 64 1658509 14400 65 
6 21-proc 10 78 3923623 453600 82 

I eine gruppierte Balkendiagramm aus diesen Daten erstellt werden soll, so dass der X-Achse enthält Input Feld (als Gruppen) und Y-Achse stellen die logarithmische Skalierung für die Felder Rtime und Btime (die zwei Balken) dar.

Alle Lösungen/Beispiele, die ich online überprüfte, hatten ähnliche Daten in einem dreispaltigen Layout. Ich kann nicht die Daten verwenden, die ich habe, um das gruppierte Balkendiagramm zu erzeugen. Oder wenn es eine Möglichkeit gibt, diese Daten in ein und ggplot kompatibles Datenformat zu konvertieren (manuelle Konvertierung ist keine Option, da es sich um eine riesige Datei mit vielen Zeilen handelt).

Edit:

Graph erzeugt unter Verwendung GNCs Lösung

enter image description here

Antwort

17

Wie gewünscht, eine ggplot2 Lösung:

df <- read.table(text = "  Input Rtime Rcost Rsolutions Btime Bcost 
1 12-proc.  1 36  614425  40 36 
2 15-proc.  1 51  534037  50 51 
3 18-proc  5 62 1843820  66 66 
4 20-proc  4 68 1645581 104400 73 
5 20-proc(l)  4 64 1658509 14400 65 
6 21-proc 10 78 3923623 453600 82",header = TRUE,sep = "") 

dfm <- melt(df[,c('Input','Rtime','Btime')],id.vars = 1) 

ggplot(dfm,aes(x = Input,y = value)) + 
    geom_bar(aes(fill = variable),stat = "identity",position = "dodge") + 
    scale_y_log10() 

enter image description here

Hinweis eine Art Unterschied hier, wo seit log(1) = 0, ggplot2 behandelt, dass als Bar von Null Höhe und doesn‘ t plotten alles, während barplot einen kleinen Stummel plottet (was meiner Meinung nach ein wenig irreführend ist).

+1

genial. Ich wünschte, ich wüsste das, bevor ich das dumme Python-Skript schreibe. {Python ist gut!} Vielen Dank joran – Ankit

+2

Es lohnt sich zu beachten, dass 'schmelzen' im Paket 'reshape2' ist – Serenthia

+0

Auch benötigt, um stat =" identity "' in 'geom_bar', da es stattdessen standardmäßig auf' stat = "bin" ' – Serenthia

5

Ich glaube, ich das Problem zu verstehen, und das ist, was ich (kurzfristig - Option) vorschlagen:

data <- read.table("data.txt", header=TRUE) 
subset <- t(data.frame(data$Rtime, data$Btime)) 
barplot(subset, legend = c("Rtime", "Btime"), names.arg=data$Input, log="y", beside=TRUE) 

Wollen Sie das? Es ist irgendwie schmutzig, aber es macht den Job.

Aktualisierung: Code korrigiert.

+0

Sie sind der Mann! Danke vielmals. Weißt du auch, wie man das mit ggplot macht? – Ankit

2

joran Antwort hat mir sehr geholfen, aber ich hatte stat = "Identität" in der ggplot Aussage so zu verwenden:

ggplot(dfm, aes(x = Input,y = value)) + 
geom_bar(aes(fill = variable), position = "dodge", stat="identity") + 
scale_y_log10() 

Meine Version von R 3.2.2 und ggplot2 Version 1.0. 1

Danke.