Неправильные цвета для диаграммы Венна, когда площадь одного круга равна 0

Почему цвет меняется, когда площадь одного круга равна 0 (A = 0) по сравнению с тем, если она равна 0,1 (A = 0,1) --> сравните примеры 1 и 2. Также, если A и B равны 0, вместо этого круг черный зеленого цвета (см. пример 3)..

library(eulerr)

# example 1
fit <- euler(c("A" = 0.1, "B" =  10, "A&B" = 5))
p1 <- plot(fit,
          fills = list(fill = c("black", "blue", "green")),
          labels = F)
p1

введите здесь описание изображения

# example 2
fit <- euler(c("A" = 0, "B" =  10, "A&B" = 5))
p2 <- plot(fit,
          fills = list(fill = c("black", "blue", "green")),
          labels = F)
p2 

введите здесь описание изображения

# example 3
fit <- euler(c("A" = 0, "B" =  0, "A&B" = 5))
p3 <- plot(fit,
           fills = list(fill = c("black", "blue", "green")),
           labels = F)
p3

введите здесь описание изображения

Изменить:

Я нашел обходной путь с этим здесь (см. Ниже). Но порядок цветов, кажется, ведет себя очень странно. A должен быть черным, B --› синим и A&B --› зеленым. Если ни один из них не равен 0, это правильный порядок --> c (черный, синий, зеленый). Но если либо A, либо B равно 0, тогда порядок другой, в основном так же, как они появляются слева направо на графике. странный....

combo <- c(A=1, B = 10, "A&B" = 1)
fit <- euler(combo)



p <- plot(fit,
          fills = list(fill = 
                         if (combo["A"] == 0) {
                           c("green", "blue")
                           
                         } else if (combo["B"] == 0)  {
                           c("black", "green")
                         } else {
                           c("black", "blue", "green")
                         }
          ),
          labels = F)

p

person titeuf    schedule 06.10.2020    source источник


Ответы (2)


Редактировать: при повторном прочтении вашего сообщения eulerr работает, как и ожидалось.

  • p1 - ​​A — черный, B — синий, перекрытие AB — зеленый
  • p2 - A черный, B синий, зеленого нет, так как A полностью находится внутри B, поэтому он просто черный
  • p3 - A черный, B синий, но поскольку A и B полностью перекрываются, A полностью находится поверх B, поэтому все черное.

Возможно, используйте прозрачность, как показано ниже:

fit <- euler(c("A" = 0, "B" =  0, "A&B" = 5))
p3 <- plot(fit, fills = list(fill = c("black", "blue", "green"), alpha = 0.4),
           legend = list(side = "right"))
p3

введите здесь описание изображения


Оригинальный ответ, все еще актуальный для понимания перекрывающихся цветов...

Количество цветов должно совпадать с количеством наборов, в этом случае у нас есть только 2 набора: A и B, поэтому нам нужно только 2 цвета, перекрывающиеся цвета генерируются путем смешивания перекрывающихся цветов набора, см.:

# R version 4.0.2
# eulerr_6.1.0
library(eulerr) 

fit <- euler(c("A" = 1, "B" =  10, "A&B" = 5))
plot(fit, fills = list(fill = c("red", "green")), legend = list(side = "right"))

введите здесь описание изображения

fit <- euler(c("A" = 0, "B" =  10, "A&B" = 5))
plot(fit, fills = list(fill = c("red", "green")), legend = list(side = "right"))

введите здесь описание изображения

person zx8754    schedule 07.10.2020

Цвета используются по порядку. Если A=0, то для A заполнять нечем, поэтому область для B заполняется первым цветом (черным), а область для A&B вторым цветом (blue). В третьем примере A и B не имеют заливки, поэтому A&B заливается первым цветом.

Самое простое решение - просто удалить цвет (или несколько) из вектора, если у вас есть значение 0. Например.

# example 2
fit <- euler(c("A" = 0, "B" =  10, "A&B" = 5))
p2 <- plot(fit,
          fills = list(fill = c("blue", "green")),
          labels = F)
person stlba    schedule 06.10.2020
comment
хм ок, спасибо. поскольку мне нужно запустить несколько сотен диаграмм Венна, это не вариант. надо попробовать найти другое решение тогда.. - person titeuf; 06.10.2020
comment
В ggplot2 вы можете использовать именованный вектор в качестве цветовой палитры, чтобы указать заливку для определенных групп, но я не могу найти аналогичный метод, который работает здесь. - person stlba; 06.10.2020
comment
Я отредактировал свой первоначальный пример выше. почему-то он не просто заменяет первый цвет... - person titeuf; 06.10.2020
comment
благодарю вас. но я не совсем согласен с вами. :) Я имею в виду, что не имеет смысла, что цвет в вашем примере в основном только оранжевый (если A = 0,000001), и как только A равен 0, он переключается на красный. - person titeuf; 08.10.2020