manipulation ggtitle ggplot change r ggplot2

r - ggplot - ggtitle position



Texto delineado con ggplot2 (4)

Me gustaría saber si hay una forma de dibujar el "texto delineado" con ggplot2, por ejemplo, texto negro con un pequeño borde blanco, para que sea fácil de leer en fondos como mapas.

Idealmente, me gustaría conseguir el mismo tipo de etiquetas que puedes ver en Google Maps:

Gracias de antemano por cualquier pista !


La respuesta aceptada por Greg Snow ya no funciona con [email protected] debido a la llamada de aes lugar de aes_q .

Utilizar

for(i in theta) { p <- p + geom_text( aes_q(x = bquote(carat+.(cos(i)*xo)), y = bquote(price+.(sin(i)*yo)), label = ~cut), size=12, colour=''black'' ) }

en lugar.


No es ideal o muy flexible, pero puede obtener el efecto dibujando texto monocromático en negrita, luego mono texto estándar en la parte superior.

He usado un fondo de panel verde para simular el mapa.

d <- diamonds[sample(nrow(diamonds), 10), ] (p <- ggplot(d, aes(carat, price)) + geom_text( aes(label = cut, family = "mono", fontface = "bold"), size = 12, colour = "black" ) + geom_text( aes(label = cut, family = "mono"), size = 12, colour = "white" ) + opts(panel.background = theme_rect(fill = "green")) )


Una solución mucho más simple es usar la biblioteca de texto de shadowtext y usar geom_shadowtext lugar de geom_text


Aquí hay un enfoque que implementa la idea general de la función shadowtext en el paquete TeachingDemos . El código para la parte del medio podría envolverse en una función para simplificar algunas cosas. El ejemplo es descaradamente robado de la respuesta de Richie Cotton:

d <- diamonds[sample(nrow(diamonds), 10), ] p <- ggplot(d, aes(carat, price) ) theta <- seq(pi/8, 2*pi, length.out=16) xo <- diff(range(d$carat))/200 yo <- diff(range(d$price))/200 for(i in theta) { p <- p + geom_text( bquote(aes(x=carat+.(cos(i)*xo),y=price+.(sin(i)*yo),label=cut)), size=12, colour=''black'' ) } p <- p + geom_text( aes(label=cut), size=12, colour=''white'' ) p <- p + opts( panel.background=theme_rect(fill=''green'' ) ) print(p)