2009-09-25 8 views

risposta

36

Il modo ggplot per farlo sarebbe usare scale_shape_manual e fornire le forme desiderate nella values argomento:

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

result of above

Le forme sono uguali come i soliti indici 0-25: http://yusung.blogspot.com/2008/11/plot-symbols-in-r.html

+1

Questo è un modo molto migliore per farlo, poiché mantiene la legenda e funziona con ggplot, non con la grafica di base. Imparo di più su ggplot qui ogni giorno, grazie! – Vince

+0

Ciao, come posso cambiare la dimensione dei simboli quando usi scale_shape_manual()? Ho provato a utilizzare geom_point (size = 4), ma l'output era doppio simboli (due dimensioni). Qualsiasi aiuto sarà apprezzato. – Rafael

+0

Se stai usando qplot, 'size = 4' deve entrare nella chiamata' qplot', non separatamente. Se aggiungi un 'geom_point' in più, stai effettivamente creando un secondo livello. (Questo, per inciso, è il motivo per cui non dovresti usare 'qplot' - è confuso.) – 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) 

È questo che intendi? Immagino che tu possa usare uno qualsiasi dei personaggi di R ...

Questo potrebbe non essere un modo molto "ggplot" per farlo, ma la pagina man dice "Puoi usarla come se dovessi usare il ' trama 'funzione. ". :-)

alt text

+0

'Errore: scale_shape_discrete può trattare con un massimo di 6 valori discreti, ma hai 10. Vedi? scale_manual per una possibile alternativa? – isomorphismes

14

Per complemen La risposta di t Harlan, ecco un riferimento per le forme disponibili - a partire da 0 in basso a sinistra e leggere a destra e poi verso l'alto (10Y + 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