С ggplot2, как вы можете создать поле вокруг метки метки?
По нескольким причинам я пытаюсь дублировать гротескный сюжет, показанный ниже. Это нарушает многие заповеди хорошей визуализации данных, поэтому для целей обучения моя цель - использовать ggplot2
и деконструировать ее - удалять или пересматривать слабо выбранные функции по одному. Используя данные, воспроизведенные внизу и код ниже графика, я приближаюсь, но не смог понять, как включить одну заметную функцию.
Вопрос: Есть ли способ воспроизвести черный затененный прямоугольник вокруг трех ярлыков тика? (Если это так, просто создать другую факторную переменную, чтобы идентифицировать эти три метки и изменить их шрифт на белый.)
![enter image description here]()
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
Кстати, этот вопрос использует символы для ярлыков меток, может предложить некоторые идеи, используя пакет grImport
, но его учения превышают меня, и я ищу затененную коробку вокруг указанного тика метки.
dput(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")
Ответы
Ответ 1
Я считаю, что лучше всего создать видовые экраны в месте ярлыков меток и нарисовать там черный прямоугольник и белый текст. Например:
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)
Вы найдете график ниже: ![enter image description here]()
Ответ 2
Немного не по теме, но это рекомендуемое быстрое и грязное решение: экспортируйте график как PNG (растровое) или SVG (на основе вектора) и вручную добавьте черные блоки с белым текстом.