2016-05-24 13 views
2

Ich brauche ein Barplot, das für jeden Wert einen Balken anzeigt (auch wenn der Wert etwas 0,0002 ist). Es ist auch wichtig, den Ylim im Vergleich mit anderen ähnlichen Barplots zu halten. Es ist erlaubt, den Ylim zu skalieren, aber das Schild ist wichtig. Jede Hilfe wird wirklich geschätzt.R - Barplot mit y-Skala um kleine Werte mit ggplot zu sehen

data <- c(
0.0224544949, 0.040071356, 0.005862310, 
-0.0024304989, 0.025612782, 0.004551214, 
-0.0021313240, 0.026042635, 0.004003015, 
-0.0070571818, 0.001242457, -0.006225233, 
0.0001473911, 0.052633570, 0.039935131) 

bias <- matrix(data,5,3, byrow=TRUE) 
colnames(bias) <- c("H=0.55","H=0.75","H=0.95") 
rownames(bias) <- c("M1","M2","M3","M4","M5") 

dat1 <- data.frame(
Method = factor(c("M1","M2","M3","M4","M5")), 
H = factor(c(rep(c("H=0.55"),5),rep(c("H=0.75"),5),rep(c("H=0.95"),5) ), levels=c("H=0.55","H=0.75","H=0.95")), 
Bias = c(bias[,1],bias[,2],bias[,3]) 
) 


name <- paste("Parameter bias") 

ggplot(data=dat1, aes(x=H, y=Bias, fill=Method)) + 
     geom_bar(stat="identity", position=position_dodge()) + 
     ggtitle(name) +  
     theme_bw() + 
    scale_y_continuous(limits = c(-0.03,0.03)) 
+0

anzuheften Es ist bereits alles plotten. Wenn Sie Ihre Waagen behalten müssen, ist alles, was Sie wirklich tun können, Ihre Handlung wirklich groß zu machen. Wenn Sie Ihre Skalen ablegen und einfach nur nach Markierungen suchen, kann die Facette helfen: 'ggplot (Daten = dat1, aes (x = H, y = Vorspannung, Füllung = Methode)) + geom_bar (stat =" Identität ", Position = position_dodge()) + ggtitle (name) + theme_bw() + facet_wrap (~ H, skalen = 'frei') ' – alistaire

+0

Sind Sie sicher, dass Sie das' scale_y_continuous (limits = c (-0.03,0.03)) 'in wollen Dort? Dadurch werden Sie einige Informationen verlieren. Einige der Balken werden ausgeschnitten, weil sie größer als der maximale Ylim sind. Siehe 'M5, H = 0.75' –

Antwort

0

Wenn Sie wirklich besorgt über kleine Werte nicht angezeigt sind, könnten Sie so etwas wie Tack auf einige horizontale Fehlerbalken mit geom_errorbarh() tun. Hier

ein Beispiel:

#Slightly updated data, made M5, H=0.55 even smaller so that it doesnt appear in normal plot 
data <- c(
    0.0224544949, 0.040071356, 0.005862310, 
    -0.0024304989, 0.025612782, 0.004551214, 
    -0.0021313240, 0.026042635, 0.004003015, 
    -0.0070571818, 0.001242457, -0.006225233, 
    0.00001473911, 0.052633570, 0.039935131) 

bias <- matrix(data,5,3, byrow=TRUE) 
colnames(bias) <- c("H=0.55","H=0.75","H=0.95") 
rownames(bias) <- c("M1","M2","M3","M4","M5") 

dat1 <- data.frame(
    Method = factor(c("M1","M2","M3","M4","M5")), 
    H = factor(c(rep(c("H=0.55"),5),rep(c("H=0.75"),5),rep(c("H=0.95"),5) ), levels=c("H=0.55","H=0.75","H=0.95")), 
    Bias = c(bias[,1],bias[,2],bias[,3]) 
) 

Ihre aktuelle Methode wird diese geben:

ggplot(data=dat1, aes(x=H, y=Bias, fill=Method)) + 
    geom_bar(stat="identity", position=position_dodge(width=0.9),width=0.9) + 
    ggtitle(name) +  
    theme_bw() 

enter image description here

In der oben man deutlich sehen, dass H=0.55, M5 nicht da erscheint seine so klein. Es wird jedoch immer noch geplottet.

Jetzt mit Hinzufügen von Fehlerbalken können wir es zu einem winzigen Splitter machen, so dass wir wissen, dass es geplottet wird.

ggplot(data=dat1, aes(x=H, y=Bias, fill=Method)) + 
    geom_bar(stat="identity", position=position_dodge(width=0.9),width=0.9) + 
    ggtitle(name) +  
    theme_bw()+ geom_errorbarh(aes(xmax=as.numeric(H)+0.45,xmin=as.numeric(H)-0.45,height=0,color=Method),position=position_dodge(width=0.9)) 

Welche gibt:

enter image description here

Hinweis: Ich habe Ihr ylim Code nahm weil es einige Daten abgeschnitten wird. Es wäre einfach genug, es einfach auf den obigen Code mit einer +scale_y_continuous(limits = c(-0.03,0.03))

+0

Danke Mike, das scheint zu funktionieren. Weißt du, ob es eine Möglichkeit gibt, in der y-Achse für das Intervall zu zoomen, sagen wir (-0.01,0.01)? Ich bin auf der Suche nach etwas wie Log-Skala (mit positiven kleinen Werten), die die kleinen Werte (negative und positive) zoomt. –

+0

Sie möchten ein zweites Diagramm, das nur auf die kleinen Werte zoomt? –

+0

Für alle Werte (klein und nicht) möchte ich den Bereich auf der y-Achse im Intervall verkleinern (-0.01,0.01) und die y-Achse im Intervall beibehalten (-0.05,0.05) –