如何在ggplot2中的轴刻度标签周围创建一个框? [英] How can you create a box around an axis tick label in ggplot2?

查看:339
本文介绍了如何在ggplot2中的轴刻度标签周围创建一个框?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

由于多种原因,我试图复制以下所示的怪诞情节.它违反了良好数据可视化的许多规则,因此出于培训目的,我的目标是使用ggplot2并对其进行解构-一次删除或修改选择不当的功能.使用底部复制的数据和图表下方的代码,我已经接近了,但一直无法弄清楚如何包括一项重要功能.

For several reasons, I am trying to duplicate the grotesque plot shown below. It violates many precepts of good data visualization so for training purposes my goal is to use ggplot2 and deconstruct it -- remove or revise poorly-chosen features one at a time. Using the data reproduced at the bottom and the code below the plot, I am getting close but have been unable to figure out how to include one notable feature.

问题:是否可以重现三个刻度标签周围的黑色阴影矩形? (如果是这样,则可以直接创建另一个因子变量来识别这三个标签并将其字体更改为白色.)

Question: Is there a way to reproduce the black shaded rectangle around the three tick labels? (If so, it is straightforward to create another factor variable to identify those three labels and change their font to white.)

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

顺便说一句,这个问题

BTW, this question uses symbols for tick labels may offer some insights using the grImport package but its teachings are beyond me and I am looking for a shaded box around designated tick labels.

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")

推荐答案

我认为最好的选择是在刻度标签的位置创建视口,并在此处绘制黑色矩形和白色文本.例如:

I think your best bet is to create viewports at the location of the tick labels, and draw a black rectangle and white text there. For example:

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)

将为您提供下图:

这篇关于如何在ggplot2中的轴刻度标签周围创建一个框?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆