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)