Grosor del borde del punto de control en ggplot

Cuando uso ggplot, puedo configurar la shape en 21-25 para obtener formas que tengan una configuración independiente para los colores internos ( fill ) y borde ( col ), como los que se muestran a continuación:

 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) 

enter image description here

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

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

enter image description here

¿Cómo controlo el grosor del borde?

Comenzando en 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 () gana 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 un tamaño = 5 y un trazo = 5 tendrán un diámetro de 10 mm. (# 1142)

Por lo tanto, la solución correcta para 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

Se siente un poco hacky pero puedes agregar un conjunto de puntos de ” fondo ” con el tamaño establecido en el mapeo estético más una pequeña constante para agrandar el borde de los puntos. Juega con la constante para obtener el ancho del borde deseado.

También deberá deshabilitar la leyenda de tamaño para que deje de mostrar 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) 

enter image description here

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