2010-04-05 22 views
86

En R, la función plot() toma un argumento pch que controla la apariencia de los puntos en el gráfico. Estoy haciendo diagramas de dispersión con decenas de miles de puntos y prefiero un punto pequeño, pero no demasiado pequeño. Básicamente, creo que pch='.' es demasiado pequeño, pero pch=19 es demasiado gordo. ¿Hay algo en el medio o alguna forma de escalar los puntos de alguna manera?¿Controla el tamaño de los puntos en una R scatterplot?

+0

en lugar de hacer puntos más pequeños, ¿hay una manera de trazar simplemente dicen 100 puntos de datos aleatorios serían serían fáciles de ver que 1000? – user2363642

+0

Para muchos puntos pequeños, usar alfa (transparencia) puede hacer que un diagrama de dispersión sea mucho más informativo que solo usar menos puntos para trazarlo. –

Respuesta

68

Prueba el cex argumento:

?par

  • cex
    Un valor numérico que da la cantidad por el cual el trazado de texto y símbolos deben ser magnificados relativa al valor predeterminado. Tenga en cuenta que algunos funciones gráficas tales como plot.default tienen un argumento de este nombre que multiplica este parámetro gráfica, y algunas funciones, como puntos aceptan un vector de valores que se reciclan. Otros usos serán tomando solo el primer valor si se proporciona un vector de longitud mayor que uno .
+11

no creo que alguna vez use 'cex' para controlar el tamaño del símbolo a menos que no tenga otra opción. Solo funciona algunas veces; la regla es que cuando 'cex' se establece mediante 'par', afecta el tamaño del (la mayoría) del texto en el gráfico, cuando se establece dentro de 'gráfico', 'cex' afecta solo el tamaño del símbolo. Por lo tanto, si aplica incorrectamente esa regla, no solo no se cambia el tamaño de su símbolo, sino que ahora tiene múltiples parámetros que afectan el tamaño del texto (cex.axis, cex.lab, cex.main y cex.sub - todos hacen lo mismo trabajo como 'cex', solo por partes). Código como ese es difícil de mantener y extender. – doug

+4

De acuerdo. Establecer 'cex' globalmente a través de' par' cambia todo tipo de cosas, incluidos los márgenes de figura, que debe corregir. Sin embargo, la configuración de 'cex' dentro de' plot' parece funcionar. – flies

83

PCH = 20 vuelve un símbolo dimensionados entre "" y 19.

Es un símbolo lleno (que es probablemente lo que desea).

Aparte de eso, incluso el sistema de gráficos base en R permite al usuario un control detallado sobre el tamaño, el color y la forma del símbolo. Por ejemplo,

dfx = data.frame(ev1=1:10, ev2=sample(10:99, 10), ev3=10:1) 

with(dfx, symbols(x=ev1, y=ev2, circles=ev3, inches=1/3, 
        ann=F, bg="steelblue2", fg=NULL)) 

Graph example

+0

Me encanta esta trama, pero me gustaría que el radio sea igual al número de observaciones en ese punto, ¿podría mostrarme cómo hacerlo? –

+0

'pi * R^2' (la superficie) debe ser proporcional al número de observaciones. – SESman

+5

@saratis Esto hará lo que quieras: 'símbolos (x = dfx $ ev1, y = dfx $ ev2, círculos = sqrt (dfx $ ev3/pi), pulgadas = 1/3, ann = F, bg =" steelblue2 ", fg = NULL)' – fmark

15

Como rcs indicado, cex harán el trabajo en el paquete de gráficos de base. Supongo que no está dispuesto a hacer su gráfico en ggplot2, pero si lo hace, hay un atributo estético size, que puede controlar fácilmente (ggplot2 tiene argumentos de funciones fáciles de usar: en lugar de escribir cex (expansión de caracteres), en ggplot2 puede escribir, por ejemplo, size = 2 y obtendrá un punto de 2 mm).

Aquí está el ejemplo:

### base graphics ### 
plot(mpg ~ hp, data = mtcars, pch = 16, cex = .9) 

### ggplot2 ### 
# with qplot() 
qplot(mpg, hp, data = mtcars, size = I(2)) 
# or with ggplot() + geom_point() 
ggplot(mtcars, aes(mpg, hp), size = 2) + geom_point() 
# or another solution: 
ggplot(mtcars, aes(mpg, hp)) + geom_point(size = 2) 
+4

Y, si realmente trazas decenas de miles de puntos, ggplot2 tiene varias formas alternativas de que se vea bien - ajustes alfa, contenedores hexagonales, diagramas de contorno, etc. Consulte las páginas 72-77 del libro ggplot2, si hay uno en su biblioteca o si su biblioteca tiene acceso electrónico a libros Springer (creo que la mayoría de los libros R están ahí) –

+0

Sí ... Especialmente uso 'alpha' en diagramas de dispersión, para evitar el sobrerrollamiento. – aL3xa

Cuestiones relacionadas