考虑这个简单的例子

library(tidyverse)
tibble(x = as.factor(c('good', 'neutral', 'bad')),
       y = as.factor(c('bad', 'neutral', 'bad'))) %>%
  ggplot(aes(x = x, y = y)) + geom_point()


r - 围绕轴标签绘制彩色框-LMLPHP

我想将x标签(goodneutralbad)放在不同的彩色框中。例如,good(在x轴和y轴上)将被包围在一个小的绿色框​​中,依此类推。

我可以在ggplot2中这样做吗?

最佳答案

在绘图区域外使用geom_label的解决方案:

ggplot(data, aes(x, y)) +
  geom_point() +
  geom_label(aes(0.3, y, label = y, fill = y), hjust = 0) +
  geom_label(aes(x, 0.45, label = x, fill = x)) +
  theme_minimal() +
  theme(
    axis.text = element_blank(),
    axis.ticks = element_blank(),
    legend.position = "none"
  ) +
  coord_cartesian(xlim = c(1, 3), ylim = c(1, 2), clip = "off")


r - 围绕轴标签绘制彩色框-LMLPHP



另一种解决方案

您应该创建带有边框但没有填充的geom_rect并将其绘制在绘图区域之外(使用coord_cartesian):

library(tidyverse)
data <- tibble(
  x = as.factor(c('good', 'neutral', 'bad')),
  y = as.factor(c('bad', 'neutral', 'bad'))
)
ggplot(data, aes(x, y)) +
  geom_point() +
  # put rects on y-axis
  geom_rect(aes(xmin = 0.1, xmax = 0.45, color = y,
                ymin = as.numeric(y) - 0.1, ymax = as.numeric(y) + 0.1),
            fill = NA, size = 3) +
  # put rects on x-axis
  geom_rect(aes(ymin = 0.3, ymax = 0.4, color = x,
                xmin = as.numeric(x) - 0.15, xmax = as.numeric(x) + 0.15),
            fill = NA, size = 3) +
  # Here it's important to specify that your axis goes from 1 to max number of levels
  coord_cartesian(xlim = c(1, 3), ylim = c(1, 2), clip = "off")


r - 围绕轴标签绘制彩色框-LMLPHP

关于r - 围绕轴标签绘制彩色框,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56543485/

10-12 16:49