superponer - ¿Cómo se puede crear un cuadro alrededor de una etiqueta de marca de eje en ggplot2?
superponer graficas en r ggplot (2)
Por varias razones, estoy tratando de duplicar la trama grotesca que se muestra a continuación. Viola muchos preceptos de una buena visualización de datos, por lo que, para fines de capacitación, mi objetivo es usar ggplot2
y deconstruirlo: eliminar o revisar las funciones mal elegidas una por una. Usando los datos reproducidos en la parte inferior y el código debajo de la trama, me estoy acercando pero no he podido averiguar cómo incluir una característica notable.
Pregunta: ¿Hay alguna forma de reproducir el rectángulo sombreado negro alrededor de las tres etiquetas de marca? (Si es así, es sencillo crear otra variable factorial para identificar esas tres etiquetas y cambiar su fuente a blanco).
ggplot(plotpg19, aes(x = risks, y = scores, fill = colors)) +
geom_bar(stat = "identity", width = 0.6) +
scale_fill_manual(values = c("grey50", "deepskyblue2", "mediumorchid3", "gold")) +
geom_text(aes(label = scores), hjust = -0.4, size = 8, face = "bold") +
coord_flip() +
theme_bw() + labs(x = NULL, y = NULL) +
theme(panel.grid.major = element_blank()) +
guides(fill = FALSE) +
scale_y_continuous(breaks = seq(0, 100, 20), labels = seq(0, 100, 20), expand = c(0, 0)) +
theme(
panel.border = element_blank(),
axis.line = element_line(colour = "black", size = 5, linetype = "solid", lineend = "square")
) +
geom_hline(yintercept = seq(0, 80, 10), colour = "grey30", size = .5, linetype = "dotted") +
theme(axis.line.x = element_blank()) # to get a single axis border, must format both and then blank one
Por cierto, esta pregunta utiliza símbolos para que las etiquetas de garrapatas puedan ofrecer algunas ideas al usar el paquete grImport
, pero sus enseñanzas me superan y estoy buscando un recuadro sombreado alrededor de las etiquetas de garrapatas designadas.
plotpg19 <- structure(list(risks.format = structure(c(2L, 3L, 1L, 4L, 5L,
7L, 8L, 6L), .Label = c("Geographic locations in which/n the company operates",
"Inadequate resources for anti-bribery//ncorruption compliance activities",
"Industries/sector(s) in which/n the company operates",
"Lack of anti-bribery/corruption training/n or awareness within the business",
"Lack of understanding/n by top executives",
"Other", "Rogue employees", "Third parties/associates/n acting on our behalf"
), class = "factor"), risks = structure(c(8L, 7L, 6L, 5L, 4L,
3L, 2L, 1L), .Label = c("Other", "Third parties/associates acting on our behalf",
"Rogue employees", "Lack of understanding by top executives",
"Lack of anti-bribery/corruption training or awareness within the business",
"Geographic locations in which the company operates", "Industries/sector(s) in which the company operates",
"Inadequate resources for anti-bribery/corruption compliance activities"
), class = "factor"), scores = c(15, 28, 71, 16, 5, 48, 55, 2
), colors = c("A", "A", "B", "A", "A", "C", "D", "A")), .Names = c("risks.format",
"risks", "scores", "colors"), row.names = c(NA, -8L), class = "data.frame")
Creo que lo mejor es crear viewports en la ubicación de las etiquetas de tic y dibujar un rectángulo negro y un texto blanco allí. Por ejemplo:
vp1 <- viewport(x = 0.225, y = 0.55, width = 0.45, height = 0.07)
grid.rect(gp = gpar(fill="black"), vp = vp1)
grid.text("Lack of anti-bribery corruption training or awareness within the business", gp=gpar(col="white", cex = 0.6), vp = vp1)
Te daré el siguiente gráfico:
Un poco fuera de tema, pero esta es una solución rápida y sucia sugerida: exporte el gráfico como PNG (mapa de bits) o SVG (basado en vectores) y agregue manualmente los bloques negros con texto blanco.