围绕轴标签绘制彩色框

时间:2019-06-11 12:14:17

标签: r ggplot2

考虑这个简单的例子

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

enter image description here

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

我可以在ggplot2中这样做吗?

4 个答案:

答案 0 :(得分:6)

喜欢吗?

tibble(x = as.factor(c('good', 'neutral', 'bad')),
y = as.factor(c('bad', 'neutral', 'bad'))) %>%
ggplot(aes(x = x, y = y)) + 
  geom_point() + 
  theme(axis.text.x = element_text(color = c('red', 'blue', 'green')))

您的情节:

your Plot

编辑

使用grid

的另一种漂亮的贫民窟解决方案
tibble(x = as.factor(c('good', 'neutral', 'bad')),
y = as.factor(c('bad', 'neutral', 'bad'))) %>%
ggplot(aes(x = x, y = y)) + 
  geom_point()

grid::grid.polygon(x = c(.3,.3,.25,.25), y = c(.07,.04,.04,.07),gp = gpar(col = 'green', fill = 'green', alpha = .5))
grid::grid.polygon(x = c(.525,.525,.575,.575), y = c(.07,.04,.04,.07),gp = gpar(col = 'red', fill = 'red', alpha = .5))
grid::grid.polygon(x = c(.79,.79,.86,.86), y = c(.07,.04,.04,.07),gp = gpar(col = 'blue', fill = 'blue', alpha = .5))

the Ghetto way

答案 1 :(得分:2)

另一种方法

创建颜色向量,并将其传递到axis.text.x()的{​​{1}}选项中。

theme()

axis-labels

答案 2 :(得分:2)

在绘图区域外使用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")

enter image description here


另一种解决方案

您应该创建带有边框但没有填充的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")

enter image description here

答案 3 :(得分:0)

一种方法可能是:

tibble(x = as.factor(c('good', 'neutral', 'bad')),
       y = as.factor(c('bad', 'neutral', 'bad'))) %>% 
  ggplot(aes(x = x, y = y)) + geom_point()+
  geom_rect(aes(xmin=0.5, xmax=1.5, ymin=-Inf, ymax=Inf), fill="red", alpha=0.1)+
  geom_rect(aes(xmin=1.5, xmax=2.5, ymin=-Inf, ymax=Inf), fill="yellow", alpha=0.1)+
  geom_rect(aes(xmin=2.5, xmax=3.5, ymin=-Inf, ymax=Inf), fill="green", alpha=0.1)

使用geom_rect(),您可以添加彩色背景:

enter image description here