2016-03-25 19 views
0

Ich habe das Folowing:BarPlot verschoben in R

km1 <- c(0.037, 0.066, 0.048, 0.11, 0.105, 0.113, 0.05) 
km2 <- c(0.037, 0.062, 0.048, 0.102, 0.106, 0.116, 0.048) 
km3 <- c(0.032, 0.05, 0.05, 0.1, 0.106, 0.118, 0.042) 
km4 <- c(0.031, 0.052, 0.052, 0.086, 0.09, 0.114, 0.04) 
km5 <- c(0.037, 0.074, 0.046, 0.12, 0.114, 0.132, 0.044) 
km6 <- c(0.037, 0.062, 0.046, 0.1, 0.106, 0.118, 0.042) 
age <- c(30,45,60,75,90,105,120) 

mydata <- matrix(c(km1, km2, km3, km4, km5, km6), nrow = 6, ncol = 7, byrow = TRUE) 

barplot(mydata, beside = TRUE, 
     col = c("yellow","blue","indianred","red2","green","purple"), 
     legend.text = rownames(age), 
     xlab = "age", ylab="GR", 
     ylim=c(0.000, 0.200), 
     xlim=c(30,120), 
     axes=FALSE, las=2) 
box() 
axis(side=1, at=seq(30,120, by=15), cex.axis=0.8, tck=0.02) 
axis(side=2, at=seq(0.000, 0.200, by=0.025), cex.axis=0.8, tck=0.02, las=1) 

Ich brauche jeden coloumn auf genaues Datum festgelegt haben. Aber wenn ich versuche, diesen Code zu verwenden, bewegt sich das Bild.

Hier ist das Ergebnis:

enter image description here

Was damit genau falsch?

Ich möchte dieses Ergebnis erreichen: enter image description here

+0

Es ist mir nicht ganz klar, was Sie erreichen möchten ... könnten Sie bitte ein Bild Ihres gewünschten Ergebnisses posten? Wie auch immer, der Schuldige ist 'xlim'; Barplot berechnet die Position der Spalten automatisch (und gibt sie unsichtbar zurück), zwingt sie zwischen 30-120, Sie verschieben die Darstellung ... – digEmAll

Antwort

0

Schnell Hack: nicht xlim setzen und die Alters Etiketten genau platzieren, wo Sie wollen ...

res <- barplot(mydata, beside = TRUE, 
    col = c("yellow","blue","indianred","red2","green","purple"), 
    xlab = "age", ylab="GR", 
    ylim = c(0.000, 0.200), 
    axes = FALSE, las=2) 
box() 

axis(side=1, at = colMeans(res), labels=age, cex.axis=0.8, tck=0.02) 
axis(side=2, at=seq(0.000, 0.200, by=0.025), cex.axis=0.8, tck=0.02, las=1) 

denke ich, das Ergebnis sieht aus wie was Sie mögen:

enter image description here

Eine Lösung basierend auf 0.123.:

require(reshape2) 
require(ggplot2) 

mydata2 <- data.frame(km1=km1, km2=km2, km3=km3, 
         km4=km4, km5=km5, km6=km6, age=age) 
datm <- melt(mydata2, value.name="km", variable.name="class", id.vars="age") 
ggplot(datm, aes(x = factor(age), y = km, fill=class)) + 
    geom_bar(stat = "identity", position="dodge", color="black") 

Das Ergebnis sieht ganz nett:

enter image description here


EDIT1:

res <- barplot(mydata, beside = TRUE, 
    col = c("yellow","blue","indianred","red2","green","purple"), 
    xlab = "age", ylab="GR", 
    ylim = c(0.000, 0.200), 
    axes = FALSE, las=2) 
box() 
abline(h=(seq(0.000,0.200,0.025)), col="lightgray", lty="dotted") 

axis(side=1, at = colMeans(res), labels=age, cex.axis=0.8, tck=0.02) 
axis(side=2, at=seq(0.000, 0.200, by=0.025), cex.axis=0.8, tck=0.02, las=1) 

EDIT2 horizontale Linien hinzufügen: Legen Sie Farben manuell (nicht empfohlen)

ggplot(datm, aes(x = factor(age), y = km, fill=class)) + 
    geom_bar(stat = "identity", position="dodge", color="black") + 
    scale_fill_manual(values=c("yellow","blue","indianred","red2","green","purple")) 
+0

Sie sollten die Achse x nicht mit '4 + 7 * (0: 6)' berechnen da die Barplotberechnung abweichen kann. Sie sollten den Ergebniswert von barplot verwenden, der die x-Koordinaten für jede Spalte angibt ... – digEmAll

+0

Vielen Dank! Es ist genau das, wonach ich suche! –

+0

Ich empfehle dringend, zuerst das Ergebnis von barplot zu speichern (z. B. 'res <- barplot (...)'), dann statt '4 + 7 * (0: 6)' 'at = colmeans (res)'. – digEmAll

Verwandte Themen