Как объединить отталкивающие надписи и текст тени или ореола в ggplot2? - PullRequest
2 голосов
/ 28 июня 2019

Есть несколько хороших решений для отталкивания меток в ggplot2 (например, ggrepel ) или теневого текста для меток (например, ggshadowtext и этого ответа ). Но ничего, что позволяет нам объединить эти две функции.

Я пробовал этот хак, который много раз печатает этикетки в немного разных местах, но он не подходит для geom_text_repel

library(ggplot2)

# subset data
d <- diamonds[1:20,]

# make plot
p <- ggplot(d, aes(carat, price)) +
  geom_point()

# make halo layers
theta <- seq(pi / 8, 2 * pi, length.out = 16)
xo <- diff(range(d$carat)) / 200
yo <- diff(range(d$price)) / 200
for (i in theta) {
  p <- p + 
    geom_text_repel(data = d, 
              aes_q(x = bquote(carat + .(cos(i) * xo)),
                    y = bquote(price + .(sin(i) * yo)),
                    label = ~cut),
              size = 6,
              colour = 'black', 
              seed = 1,
              segment.colour = NA)
}

# update plot with halo and interior text
p <- p + geom_text_repel(aes(label = cut),
                   size = 6,
                   colour = 'white', 
                   seed = 1,
                   segment.colour = "grey80")

p

Это очень медленно, и в местах, где метки находятся близко, этот метод не эффективен:

enter image description here

Как мы можем получить теневой текст, который работает с geom_text_repel? Я опубликовал вопрос об этом в репозитории ggrepel GitHub некоторое время назад, но ответа не было (возможно, это невозможно?)

...