2016-06-19 12 views
7

Próbuję wykreślić wiele zestaw danych na tym samym wykresie. Na przykład poniżej mam zestaw eksperymentów z ustawieniami: "P-0,1" i "P-0.2", jak oznaczono przez czynnik B. Dla każdego eksperymentu mam trzy wartości wyjściowe "P", "Q", "O ", jak oznaczono przez czynnik A. Zgrupowałem eksperymenty przez wypełnienie kolorem i pogrupowałem wyniki według koloru, rodzaju linii i kształtu.Wiele legend z ggplot2

library(ggplot2) 

dat <- data.frame(
    A = factor(c("O", "O", "P", "P", "Q", "Q", "O", "O", "P", "P", "Q", "Q"), levels=c("O", "O", "P", "P", "Q", "Q","O", "O", "P", "P", "Q", "Q")), 
    B = factor(c("P-0.1", "P-0.1", "P-0.1", "P-0.1","P-0.1", "P-0.1", "P-0.2", "P-0.2", "P-0.2", "P-0.2", "P-0.2", "P-0.2"), levels = c("P-0.1", "P-0.1", "P-0.1", "P-0.1","P-0.1", "P-0.1", "P-0.2", "P-0.2", "P-0.2", "P-0.2", "P-0.2", "P-0.2")), 
    X = c(0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1), 
    Y = c(10, 15, 12, 13, 9, 14, 30, 20, 32, 21, 27, 19) 
) 

p = ggplot(data=dat, aes(x=X, y=Y, colour=A, size=A, shape=A, linetype=A, fill=B, group=interaction(A,B))) + geom_point() + geom_line() + theme_bw() 
p = p + geom_point(size=4, alpha=0) + geom_point(size=4, show.legend=FALSE) + guides(shape = guide_legend(nrow=3, byrow = TRUE, keywidth = 1.5, keyheight = 1), colour = guide_legend(override.aes = list(alpha=1))) 

p = p + scale_shape_manual(name="", values=c(21,22,23)) 
p = p + scale_colour_manual(name="", values=c("#005ccc", "#007700", "#56B4E9")) 
p = p + scale_linetype_manual(name="", values=c(0,0,1)) 
p = p + scale_size_manual(name="", values = c(1, 1, 1)) 
p = p + scale_fill_manual(name="", values = c("red", "blue")) 

Powyższy kod rysuje figurę poprawnie, ale jestem coraz czarni kręgi w legendzie o skali wypełnienia, gdzie spodziewałem wypełnione czerwone i niebieskie pudełka. Jak to naprawić?

Reference Figure

+1

To działa na mnie 'p = p + scale_fill_manual (name = "", wartości = c ("czerwony", "niebieski"), poprowadzi = guide_legend (override.aes ​​= AES (shape = 21))) '. Więcej informacji [tutaj] (https://github.com/hadley/ggplot2/issues/857) – Tung

+0

Dzięki za wskazanie tego. To działa. – max

+1

Aby uzyskać czerwone i niebieskie pola, możesz użyć 'override.aes ​​= list (shape = 22, size = 5)' – Jaap

Odpowiedz

2

Jak podano w komentarzach, że aktualizowana

p = p + scale_fill_manual (nazwa = "" wartości = C ("czerwony", "niebieski") kierować = guide_legend (override.aes ​​= list (kształt = 22, rozmiar = 5)))

, aby uzyskać żądany obraz. Wygląda to tak:

enter image description here