如何根据两个不同的条件为真,用 ggplot 标记一个点?

use*_*730 1 r ggplot2

假设我有一个包含两个变量的数据框。我们将调用这些变量xvar_count。我们将说这var_count只是整数并且本质上是分类的(即所有值都是 1、2、3、4 或 5)。我想x在 y 轴上绘制变量,在 x 轴上绘制变量var_count。然后我想用给定geom_text的最高x值标记var_count。因此,对于 avar_count为 1 的所有元素,我只想标记具有最高x.

我有大部分编写的代码,但没有检测这种情况的条件,并说“是的,这点需要标记”。我怎么写这最后一个条件?

所以这里有一些带有一些示例数据的示例代码。

library(tidyverse)
library(ggplot)
sample_data <- tibble(var_count = c(1, 1, 1, 1, 2, 2, 2, 5),
                      x = c(0.2, 1.1, 0.7, 0.5, 2.4, 0.8, 0.9, 1.3))

sample_data %>%
  ggplot(aes(x = var_count, y = x)) +
  geom_point() +
  geom_text(aes(label =ifelse(
    FALSE,
    "my label", ""
  )), hjust = 1.2)
Run Code Online (Sandbox Code Playgroud)

我想将 ifelse 的条件从 FALSE 替换为工作,以便标记下图中圈出的点:

几乎,我想标记给定 var_count 的最高 x 值。

Duc*_*mas 5

在数据帧本身内部执行此操作是最简单的。在执行ifelse()or 的位置创建一个新列,如果条件为 ,则为case_when()该列提供一个空字符串。然后将其用作标签文本。""FALSE

library(tidyverse)
library(ggrepel)

my_iris <- 
    iris %>% 
    group_by(Species) %>% 
    mutate(my_label = ifelse(Sepal.Width == max(Sepal.Width),
                             paste(Sepal.Width, "cm"), "")) %>% 
    ungroup()

ggplot(my_iris, aes(x = Petal.Length, y = Sepal.Width, colour = Species)) +
    geom_point() +
    geom_text_repel(aes(label = my_label), box.padding = 2)
Run Code Online (Sandbox Code Playgroud)

reprex 包(v0.2.1)于 2019 年 11 月 22 日创建