ggforce: geom_mark_ellipse - Как перемещать коннекторы? - PullRequest
1 голос
/ 05 мая 2020

У меня есть некоторые данные, для которых я хотел бы обвести несколько различных подмножеств. Я использую ggplot2 и ggforce для построения данных и рисования эллипса (geom_mark_ellipse) вокруг данных.

У меня проблема в том, что положение соединителей на эллипсах (для моих data) находятся в неоднозначных позициях (на стыке двух эллипсов, на границе двух эллипсов, которые касаются друг друга).

Как я могу вручную установить положение соединителя на эллипс? Или, по крайней мере, повлиять на них в конкретном регионе?

У меня есть код ниже, который передает дух, в котором я рисую свои данные. В целях примера, как я могу сделать так, чтобы все метки отображались в верхнем левом углу графика или все они соединялись с эллипсами в точках x == 0, -2, -4 для каждого из факторов?

library(tidyverse)
library(ggforce)


x <- c(-1,0,1,-3,-2,2,3,-5,-4,4,5)
t <- c(1,1,1,2,2,2,2,3,3,3,3)

tmp <- as_tibble_col(x, column_name = "x")
tmp <- tmp %>% mutate(t = t)

#How do I move the position of the label connectors on the ellipses?
tmp %>% 
  ggplot(aes(x=x, y=x)) +
  geom_mark_ellipse(aes(label = t, group=t),con.cap = 0) +
  geom_point()

Создано 05.05.2020 с помощью пакета REPEX (v0.3.0)

1 Ответ

0 голосов
/ 06 мая 2020

Мне удалось сделать это для моего надуманного примера, но я еще не попробовал свои реальные данные, но есть надежда.

Как показано в приведенном ниже коде, я создал данные для заполнения области (вверху left), в котором я не хотел использовать метки, и присвоил ему коэффициент "". Я вручную установил цвет разъемов на NA для этого фактора и избавился от фона ярлыков для всего. Поскольку коэффициент равен "", метка представляет собой пустую строку, и ничего не отображается. Я также установил scale_colour_manual, чтобы придать цвет NA эллипсу, который я не хотел видеть. Я также отфильтровал geom_point, чтобы не отображать данные с коэффициентом "". Наконец, я удалил легенду.

library(tidyverse)
library(ggforce)

x <- c(-1,0,1,-3,-2,2,3,-5,-4,4,5)
t <- c(1,1,1,2,2,2,2,3,3,3,3)

tmp <- as_tibble_col(x, column_name = "x")
tmp <- tmp %>% mutate(y=x)
tmp <- tmp %>% mutate(t = t)

#now lets add some dodging data
tmp <- tmp %>% mutate(t = as.character(t))
tmp <- tmp %>% add_row(x=c(-5,2.5,-2.5), y=c(-2.5,5,2.5),t="")

tmp %>% 
  ggplot(aes(x=x, y=y)) +
  geom_mark_ellipse(aes(label = t, group=t, colour=factor(t)),
                    con.cap = 0, con.colour = c(NA, "black","black","black"),
                    label.fill=NA) +
  scale_colour_manual(values=c(NA, "black", "black", "black")) +
  geom_point(data = subset(tmp, t != "")) +
  theme(legend.position = "none")

Создано 06.05.2020 пакетом репекс (v0.3.0)

...