首页 > 解决方案 > 如何添加以字符变量为条件的 geom_text?

问题描述

我有一个具有四个不同名称(a、b、c、d)的字符变量。我使用以下代码绘制它们的值:

ggplot(df)+
  geom_point(aes(val, name))

但是,我想在绘图上添加一个可以在字符变量中区分的文本。例如,介于ab我想写“组 1”和介于cd我想写“组 2”。这样读者就可以理解在同一组中存在子组。我geom_text以前在一个有两个数字变量的图上使用过,但是当有一个数字和一个字符变量时,我不知道该怎么做。

这是我得到的情节:

在此处输入图像描述

这是我打算做的情节: 在此处输入图像描述

这是数据:

structure(list(name = structure(c("a", "b", "c", "d"), format.stata = "%9s"), 
    val = c(2, 4, 1.5, 3)), row.names = c(NA, -4L), class = "data.frame")

标签: rggplot2

解决方案


您可以执行以下操作:

library(tidyverse)

df <- structure(list(name = structure(c("a", "b", "c", "d"), format.stata = "%9s"), 
                     val = c(2, 4, 1.5, 3)), row.names = c(NA, -4L), class = "data.frame")

df %>% 
  ggplot(aes(val, name))+
  geom_point() +
  annotate("text", y = 1.5, x = 1, label = "Group 1", angle = 90, size = 8) +
  annotate("text", y = 3.5, x = 1, label = "Group 2", angle = 90, size = 8) +
  annotate("text", y = 1.5, x = 1.2, label = "}", size = 24) +
  annotate("text", y = 3.5, x = 1.2, label = "}", size = 24)

示例_1.png

或者可能是这样的:

library(tidyverse)
library(ggforce)

df <- structure(list(name = structure(c("a", "b", "c", "d"), format.stata = "%9s"), 
                     val = c(2, 4, 1.5, 3)), row.names = c(NA, -4L), class = "data.frame")

df %>% 
  mutate(group = ifelse(name %in% c("a", "b"), "group a + b", "group c + d")) %>% 
  ggplot(aes(val, name))+
  geom_point() +
  geom_mark_ellipse(aes(fill = group,
                        color = group))

示例_2.png


推荐阅读