удаление пространства между ярлыком грепел, сделанным с использованием плотмата - PullRequest
0 голосов
/ 18 ноября 2018

Я создаю график, на котором я хочу отображать метки, используя 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)

Создано в 2018-11-17 с помощью пакета Представить (v0.2.1)

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

1 Ответ

0 голосов
/ 21 ноября 2018

Ниже приведена обновленная версия вашего кода, в которой реализован способ размещения запятой (без последующего пробела) между именем вида и размером выборки. Ваши ярлыки, например, будут выглядеть как "~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)

Который производит следующий участок:

Plot with labels without spaces

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

...