2009-09-25 11 views

Odpowiedz

36

Sposób, ggplot zrobić byłoby użyć scale_shape_manual i zapewnienia pożądanych kształtów w values argumentu:

qplot(1:10, y, shape=b) + scale_shape_manual(values = c(0, 5, 6, 15)) 

result of above

kształty są takie same jak zwykle 0-25 indeksów: http://yusung.blogspot.com/2008/11/plot-symbols-in-r.html

+1

jest to znacznie lepszy sposób to zrobić, jak zachowuje legendę i pracuje z grafiką ggplot nie bazowych. Codziennie uczę się więcej o ggplot, dzięki! – Vince

+0

Witam, jak zmienić rozmiar symboli podczas korzystania z scale_shape_manual()? Próbowałem użyć geom_point (size = 4), ale wynik był podwójny (dwa rozmiary). Każda pomoc zostanie doceniona. – Rafael

+0

Jeśli używasz qplot, 'size = 4' musi wchodzić do wywołania' qplot', a nie osobno. Jeśli dodasz dodatkowy "geom_point", skutecznie tworzysz drugą warstwę. (To, nawiasem mówiąc, dlatego nie powinieneś używać 'qplot' - jest to mylące.) – Harlan

6
> y <- rnorm(10) 
> b <- as.factor(sample(1:4,10,replace=T)) 
> qplot(1:10, y, shape=b) 
> qplot(1:10, y, pch=letters[1:10], cex=6) 

Czy to masz na myśli? Wyobrażam sobie, że możesz użyć dowolnej z kreślonych postaci R ...

To może nie być bardzo "ggplot", ale strona podręcznika brzmi "Możesz go użyć tak, jakbyś użył" fabuła "funkcja.". :-)

alt text

+0

'Error: scale_shape_discrete może zajmować się maksymalnie 6 wartości dyskretnych, ale trzeba 10. Patrz? scale_manual do ewentualnej alternative' – isomorphismes

14

do complemen Odpowiedź t Harlana, oto odnośniki do dostępnych kształtów - start od 0 na dole po lewej i przeczytać w prawo, potem w górę (10L + x):

df <- data.frame(x=c(0:129)) 
ggplot(df, aes(x=x%%10, y=floor(x/10), shape=factor(x), colour=x, size=10)) + 
    geom_point() + 
    scale_shape_manual(values=df$x) + theme(legend.position='none') + 
    scale_x_continuous(breaks=0:10) + scale_y_continuous(breaks=0:12) + 
    scale_colour_hue() + scale_colour_gradientn(colours=rainbow(3)) 

Shapes available in ggplot2