2015-02-25 12 views
7

Ich erstelle eine Figur, wo ich eine Linie und Konfidenzbänder um sie herum habe. Um dies zu tun, verwende ich sowohl geom_line als auch geom_ribbon in ggplot2 in R. Das Problem ist, wie man mit der Legende umgehen. In ihm werden Schrägstriche hinzugefügt und nach dem googlen für eine ganze Weile verstehe ich, dass das ein häufiges Problem ist. Die meisten Lösungen, die ich gefunden habe, sind für Barplots (z.B. das ggplot-Kochbuch). Ich habe auch Lösungen gefunden, um es zu unterdrücken, aber das hat nicht für mich funktioniert.Legende mit geom_line und geom_ribbon

Im Folgenden habe ich drei Plots, die das Problem zeigen. Erstens, wenn ich nur die Linie zeichne, sieht es gut aus. Wenn ich dann den Ribbon-Teil des Plots hinzufüge, werden die Schrägstriche hinzugefügt. Die dritte Handlung ist, wie ich es aussehen soll (offensichtlich die Schrägstriche abschneiden). Wie erreiche ich das?

enter image description here

Edit: Um klar zu sein, was ich will, ist, was ich in der folgenden Abbildung haben (was ich MS Paint feste verwenden):

enter image description here

library(ggplot2) 
library(gridExtra) 

set.seed(1) 
y <- sin(seq(1, 2*pi, length.out = 100)) 
x <- 1:100 
plotdata <- data.frame(x=x, y=y, lower = (y+runif(100, -1, -0.5)), upper = (y+runif(100, 0.5, 1))) 
h1 <- ggplot(plotdata) + geom_line(aes(y=y, x=x, colour = "sin")) 
h2 <- h1 + geom_ribbon(aes(ymin=lower, ymax=upper, x=x, colour = "bands"), alpha = 0.3) 
h3 <- h2 + scale_colour_manual(name='', values=c("bands" = "grey", "sin" = "blue")) 

grid.arrange(h1, h2, h3) 

Antwort

5

Sie können Legenden erstellen - eine für die Farbe der Linie und eine für die Füllung des Bandes. Dann mit scale_... die Namen für die Legende auf leer setzen. Das einzige Problem ist, dass Legendenschlüssel getrennt werden. obwohl

ggplot(plotdata) + geom_line(aes(y=y, x=x, colour = "sin"))+ 
     geom_ribbon(aes(ymin=lower, ymax=upper, x=x, fill = "band"), alpha = 0.3)+ 
     scale_colour_manual("",values="blue")+ 
     scale_fill_manual("",values="grey12") 

enter image description here

1

Try um die Farbe außerhalb aes zu behalten, dann wird es nicht auf Legende angezeigt:

h1 + geom_ribbon(aes(ymin=lower, ymax=upper, x=x), colour = "red", alpha = 0.3) 

enter image description here

+0

I * bis * wie in der Legende sein wollen. Das ist leider mein Problem. Ich habe meinen Post mit einem (MS Paint editiert) Bild aktualisiert, wie ich es aussehen möchte. – hejseb

2

Wenn Sie die Farbe auf der Legende angezeigt werden sollen, werden Sie wahrscheinlich zu Hinzufügen von ein paar zusätzlichen geom_line s zurückgreifen. Verwenden Sie keine Farbe in geom_ribbon und fügen Sie dann upper und lower Zeilen hinzu.

h2 <- h1 + geom_ribbon(aes(ymin=lower, ymax=upper, x=x), alpha = 0.3) + 
    geom_line(aes(x=x, y = lower, color = "bands")) + 
    geom_line(aes(x=x, y = upper, color = "bands")) 

image

EDIT: Sie können zusätzlich eine fill Skala verwenden.

h1 <- ggplot(plotdata) + geom_line(aes(y=y, x=x, colour = "sin", fill="sin")) 
h2 <- h1 + geom_ribbon(aes(ymin=lower, ymax=upper, x=x, fill="bands"), alpha = 0.3) + 
    geom_line(aes(x=x, y = lower, color = "bands")) + 
    geom_line(aes(x=x, y = upper, color = "bands")) 
h3 <- h2 + scale_colour_manual(name='', values=c("bands" = "grey", "sin" = "blue")) + 
    scale_fill_manual(name = '', values=c("bands" = "grey12", "sin" = "grey")) 

grid.arrange(h1, h2, h3) 

image2

könnten Sie setzen auch "bands" = "transparent" in der Farbe Aussage, wenn Sie die (kaum sichtbar) graue Linie nicht wollen.

+0

Das sieht nahe, was ich anstrebe! Gibt es eine Möglichkeit, die gesamte "bands" -Box mit dem dunkleren Grauton zu füllen? Ich habe meinen ursprünglichen Beitrag mit einem Bild von dem, wie ich es aussehen möchte, aktualisiert. – hejseb

Verwandte Themen