удаление пробела между меткой ggrepel, сделанной с помощью plotmath

Я создаю график, на котором я хочу отображать метки, используя ggrepel. Ниже я показываю минимальный пример, который показывает, как этикетка состоит из двух компонентов, разделенных запятой: первый относится к типу цветов ириса, а второй - к размеру выборки для этой группы.

# needed libraries
set.seed(123)
library(ggrepel)

# creating a dataframe with label column
(df <- iris %>%
  dplyr::group_by(Species) %>%
  dplyr::summarise(n = n(), mean = mean(Sepal.Length)) %>%
  purrrlyr::by_row(
    .d = .,
    ..f = ~ paste("list(~",
                  .$Species,
                  ",",
                  .$n,
                  ")",
                  sep = ""),
    .collate = "rows",
    .to = "label",
    .labels = TRUE
  ))
#> # A tibble: 3 x 4
#>   Species        n  mean label               
#>   <fct>      <int> <dbl> <chr>               
#> 1 setosa        50  5.01 list(~setosa,50)    
#> 2 versicolor    50  5.94 list(~versicolor,50)
#> 3 virginica     50  6.59 list(~virginica,50)

# displaying labels
ggplot(iris, aes(Species, Sepal.Length)) +
  geom_point() +
  ggrepel::geom_label_repel(data = df,
                            aes(x = Species, y = mean, label = label),
                            parse = TRUE)

Создано 17 ноября 2018 г. пакетом REPEX (v0.2.1)

У меня вопрос, как избавиться от пространства между этими двумя компонентами. Хотя я указал sep = "" в функции paste(), между двумя компонентами все еще есть лишнее пространство, которое мне не нужно (например, метки setosa, 50, versicolor, 50, virginica, 50 должны быть setosa,50, versicolor,50, virginica,50).


person Indrajeet Patil    schedule 18.11.2018    source источник
comment
Для вашего простого примера вы можете сделать свои ярлыки таким образом, чтобы вам не приходилось их анализировать. Если вы используете dplyr::mutate(label = paste0(Species, ",", n)) и удалите parse = TRUE из geom_label_repel(), вы не получите лишнего места. Я предполагаю, что у вас есть причины использовать код создания этикеток, который вы использовали в своем реальном сценарии использования, но я не думаю, что здесь он нужен.   -  person aosmith    schedule 20.11.2018
comment
Да, это правильно. Моя фактическая функция отображает уравнения, поэтому я использую plotmath в списке, а затем анализирую его. Вот пример: indrajeetpatil.github.io/ggstatsplot / article /. Посмотрите на степени свободы F-статистики. Между числителем df и знаменателем df есть пробел, который я хочу удалить, и, следовательно, вопрос.   -  person Indrajeet Patil    schedule 20.11.2018


Ответы (1)


Ниже представлена ​​обновленная версия вашего кода, в которой реализован способ помещения запятой (без последующего пробела) между именем вида и размером выборки. Например, ваши ярлыки будут выглядеть как "~setosa*\",\"*50" вместо list(~setosa,50)

(df <- iris %>%
    dplyr::group_by(Species) %>%
    dplyr::summarise(n = n(), mean = mean(Sepal.Length)) %>%
    purrrlyr::by_row(
      .d = .,
      ..f = ~ paste("~",
                    .$Species,
                    "*\",\"*",
                    .$n,
                    "",
                    sep = ""),
      .collate = "rows",
      .to = "label",
      .labels = TRUE
    ))
#> # A tibble: 3 x 4
#>   Species        n  mean label               
#>   <fct>      <int> <dbl> <chr>               
#> 1 setosa        50  5.01 "~setosa*\",\"*50"
#> 2 versicolor    50  5.94 "~versicolor*\",\"*50"
#> 3 virginica     50  6.59 "~virginica*\",\"*50"


# displaying labels
ggplot(iris, aes(Species, Sepal.Length)) +
  geom_point() +
  stat_smooth(method="lm",size=0.6,se=FALSE,colour="black")+
  ggrepel::geom_label_repel(data = df,
                            aes(x = Species, y = mean, label = label),
                            parse = TRUE)

В результате получается следующий сюжет:

График с метками без пробелов

Надеюсь, поможет.

person Taher Ahmed Ghaleb    schedule 21.11.2018