Grosor del borde del punto de control en ggplot


Al usar ggplot, puedo establecer shape a 21-25 para obtener formas que tengan un ajuste independiente para los colores internos (fill) y de borde (col), así:

df <- data.frame(id=runif(12), x=1:12, y=runif(12))
ggplot(df, aes(x=x, y=y)) + 
  geom_point(aes(fill=id, size=id), colour="black", shape=21)

introduzca la descripción de la imagen aquí

Sin embargo, no puedo averiguar cómo controlar el grosor de los bordes de las formas, ya sea configurándolos absolutamente o como un mapeo estético. Observo que si establezco un valor lwd, anula la estética size:

ggplot(df, aes(x=x, y=y)) + 
  geom_point(aes(fill=id, size=id), colour="black", shape=21, lwd=2)

introduzca la descripción de la imagen aquí

¿Cómo puedo controlar el grosor del borde?

Author: smci, 2013-10-22

3 answers

A partir de la versión 2.0.0 de ggplot2, hay un argumento para controlar el grosor del borde del punto. Del archivo NEWS.md:

Geom_point() obtiene una estética de trazo que controla el ancho del borde de las formas 21-25 (#1133, @SeySayux). el tamaño y el trazo son aditivos, por lo que un punto con tamaño = 5 y trazo = 5 tendrá un diámetro de 10 mm. (#1142)

Por lo tanto, la solución correcta a esto es ahora:

df <- data.frame(id=runif(12), x=1:12, y=runif(12))
ggplot(df, aes(x=x, y=y)) + 
  geom_point(aes(fill=id, size=id), colour="black", shape=21, stroke = 2)

Salida

 53
Author: Noam Ross,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-12-18 19:45:45

Se siente un poco hackeado, pero puede agregar un conjunto de puntos " background" con el tamaño establecido en el mapeo estético más una pequeña constante para ampliar el borde de los puntos. Juega con la constante para obtener el ancho de borde deseado.

También tendrá que desactivar la leyenda de tamaño para evitar que se muestre la leyenda en el gráfico...

ggplot(df, aes(x=x, y=y)) + 
  geom_point(aes(size=id+0.5), colour="black" , show_guide = FALSE )+
  scale_size( guide = "none" )+
  geom_point(aes(fill=id, size=id), colour="black", shape=21)

introduzca la descripción de la imagen aquí

 13
Author: Simon O'Hanlon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-10-21 23:58:42

Otra solución es crear el gráfico en R y luego exportarlo a a .archivo svg. El ancho de línea puede ser cambiado usando software de edición de gráficos vectoriales (por ejemplo, Inkscape). Este método es particularmente útil cuando los puntos de datos se superponen.

 2
Author: Gopal Penny,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-03-03 06:44:39