2016-01-06 7 views
8

Ho problemi a ricreare una trama da quando ho aggiornato alla versione 2.0.0 di ggplot: Sembra che non sia possibile ridurre la dimensione dei punti come prima, che è un problema in una trama con molti punti. Negli esempi che seguono, v'è una differenza di dimensioni ragionevoli punto tra Plot1 e Plot2, la dimensione in punti in plot3 è almeno un po 'più piccolo, ma tra plot3 e Plot4 c'è alcuna differenza nella dimensione del punto:dimensione in ggplot 2.0.0

df <- data.frame(x=1:10, y=runif(10)) 
pl <- ggplot(df) + 
    geom_point(aes(x,y), size=1) 
ggsave("plot1.png", plot=pl, width=14, height=7, units="cm", dpi=1200) 

pl <- ggplot(df) + 
    geom_point(aes(x,y), size=0.1) 
ggsave("plot2.png", plot=pl, width=14, height=7, units="cm", dpi=1200) 

pl <- ggplot(df) + 
geom_point(aes(x,y), size=0.01) 
ggsave("plot3.png", plot=pl, width=14, height=7, units="cm", dpi=1200) 

pl <- ggplot(df) + 
geom_point(aes(x,y), size=0.001) 
ggsave("plot4.png", plot=pl, width=14, height=7, units="cm", dpi=1200) 

Nella versione precedente di ggplot2 avevo usato una dimensione in punti di 0,25 e sembrava più piccola di adesso, ed è per questo che ho provato a ridurlo ulteriormente usando la nuova versione di ggplot2. Mi manca un cambiamento nel codice della nuova versione? non ho trovato nulla nella documentazione ...

+1

Nel [ggplot 2.0.0 annuncio] (http://blog.rstudio.org/2015/12/ 21/ggplot2-2-0-0 /) troviamo che "' geom_point() 'ora usa la forma 19 invece di 16.". Non so se questo è l'unico cambiamento che ha influenzato l'aspetto del punto. – Henrik

+0

Sì, l'ho visto, ma non ho trovato nulla riguardante la dimensione – silkita

+0

Interessante: l'uso della forma = 16 produce dimensioni dei punti molto più piccole della nuova forma = 19 e forma = "." è in realtà un quadrato e non un punto – silkita

risposta

7

Ok, ho trovato la soluzione. Come sottolineato da @henrik e @silkita ora la forma di default è cambiata da 16 a 19 nell'ultima versione di ggplot2. E come puoi vedere nella documentazione (ad esempio here) la forma "19" è leggermente più grande di "16". Ma questo non è il motivo per cui i "punti" sono più grandi nella versione 2.0.0. Guardando la fonte ggplot2 del geom-point.R per l'ultima release possiamo vedere che:

default_aes = aes(
    shape = 19, colour = "black", size = 1.5, fill = NA, 
    alpha = NA, stroke = 0.5 
) 

Mentre nelle versioni precedenti era:

default_aes <- function(.) aes(shape=16, colour="black", size=2, fill = NA, alpha = NA) 

Quindi, per avere il piccolo punto di prima dovremmo mettere stroke a zero. Per riassumere, per ottenere il più piccolo punto si dovrebbe scrivere:

geom_point(size = 0.1) # ggplot2 before 2.0.0 
geom_point(size = 0.1, stroke = 0, shape = 16) # ggplot2 2.0.0 

Tra l'altro, quando si lavora con i punti più piccoli non c'è differenza tra l'utilizzo di forme diverse (un pixel rimane un pixel).

UPDATE: Come sottolineato su Twitter da Hadley Wickham questo cambiamento è stato spiegato nel release notes

+1

Buona soluzione. Interessante che lo abbiano cambiato. Direi che forse è stata una regressione. –

+0

Tranne quando lo provo, non funziona. E la documentazione che hai linkato sostiene che 'stroke' non funziona nemmeno su' shape = 16'. –

7

provare a utilizzare il parametro di forma:

n <- 10000 
df <- data.frame(x=1:n, y=runif(n)) 
pl <- ggplot(df) + 
    geom_point(aes(x,y), size=1,shape=".") + labs(title="shape='.',size=1") 
pl 

rendimenti:

enter image description here

mentre:

pl <- ggplot(df) + 
    geom_point(aes(x,y), size=1) + labs(title="size=1") 
pl 

rendimenti: - (ed è lo stesso per tutte le taglie più piccole)

enter image description here

+0

Grazie, sicuramente meglio di prima e una buona soluzione, ma ho bisogno di punti ancora più piccoli (che avevo nella precedente versione ggplot2), e vorrei veramente controllare la dimensione del punto ... – silkita

+0

Sì, ho avuto un problema simile . Dovrebbe cercare e vedere se questo è archiviato come un bug di regressione ancora. –

+0

Strano che ho perso un upvote su questo tutto ad un tratto. Non è una cattiva soluzione. –