2016-08-23 3 views
0

ich zwei Bar Plots mit Basis Grafiken bin überlagern (wie sie unterschiedliche Maßstäbe haben und so weit es war ein Alptraum es auf ggplot zu tun) der folgenden Daten:Xlim und x-Achse nicht gleich in BarPlot

> str(pidf) 
'data.frame': 1300 obs. of 7 variables: 
$ spec1 : num 0.00192 0.00213 0.00151 0.00234 0.00133 ... 
$ spec2 : num 0.00241 0.00278 0.00189 0.00264 0.00155 ... 
$ spec3 : num 0.00231 0.00262 0.00187 0.00274 0.00165 ... 
$ spec4 : num 0.00209 0.0026 0.00166 0.00225 0.00165 ... 
$ spec5 : num 0.0025 0.00285 0.00188 0.00285 0.00181 ... 
$ numbers: int 1 2 3 4 5 6 7 8 9 10 ... 
$ ratios : num 0.59 0.642 0.544 0.625 0.567 ... 

Dies ist mein Code für die Stellplätze:

par(mar = c(5,5,2,5)) 
barplot(pidf$ratios, col = "skyblue", ylim = c(0, 1), 
ylab = "Sequenced Base Ratios", border = NA, main = "Chlorocebus tantalus") 
axis(1, at = round(seq(0, 1300, 100))) 
par(new = T) 
barplot(pidf$spec5, col = "chartreuse3", border = NA, ylim = c(0, 0.003), 
    axes = F, xlab = NA, ylab = NA) 
axis(side = 4) 
mtext(side = 4, line = 3, expression(pi)) 
legend("topright", legend=c(expression(pi), "Ratios"), cex = 0.75, 
    pch=c(15, 15), col=c("chartreuse3", "skyblue")) 

Wenn ich diesen Code der x-Achse verlaufen ist kürzer als die Daten Wenn ich xlim = c(1,1300) in der ersten Handlung angeben, dann bekomme ich diese

Weiß jemand, warum das passiert und wie man es repariert? Ich nehme an, es könnte mit den Par-Werten zu tun haben, aber ich brauche diese, um Platz für die Achse zu haben, die ich auf der rechten Seite zeichne. Danke im Voraus!

Antwort

0

Ich denke, das Problem ist, dass Balken nicht automatisch in Einheitsintervallen lokalisiert werden. Standardmäßig fügt barplot eine Lücke von 0,2 Einheiten zwischen Balken hinzu (siehe ?barplot, Suche nach "Leerzeichen"). Zum Beispiel, wenn wir 20 bar haben, ist der rechte Rand der x-Achse bei x = 24:

z <- 1:20 
barplot(z) 
axis(side=1,at=c(0,24)) 

enter image description here

für Ihre Anwendung ist es wahrscheinlich am einfachsten dieses space=0 durch die Angabe passen:

barplot(z,space=0) 
axis(side=1,at=c(0,20)) 

enter image description here

+0

eine solche einfache Lösung hahah, danke! –