#r #venn-diagram #eulerr
#r #диаграмма Венна #eulerr
Вопрос:
Почему цвет меняется, когда площадь одного круга равна 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, "Aamp;B" = 5))
p1 <- plot(fit,
fills = list(fill = c("black", "blue", "green")),
labels = F)
p1
# example 2
fit <- euler(c("A" = 0, "B" = 10, "Aamp;B" = 5))
p2 <- plot(fit,
fills = list(fill = c("black", "blue", "green")),
labels = F)
p2
# example 3
fit <- euler(c("A" = 0, "B" = 0, "Aamp;B" = 5))
p3 <- plot(fit,
fills = list(fill = c("black", "blue", "green")),
labels = F)
p3
Редактировать:
Я нашел обходной путь с этим здесь (см. Ниже). Но порядок цветов, кажется, ведет себя очень странно. Предполагается, что A должен быть черным, B -> синим, а A amp; B -> зеленым. Если none равно 0, это правильный порядок -> c («черный», «синий», «зеленый»). Но если либо A, либо B равно 0, то порядок отличается, в основном только тем, как они отображаются слева направо на графике. странно….
combo <- c(A=1, B = 10, "Aamp;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
Ответ №1:
Редактировать: перечитывая ваш пост, eulerr работает так, как ожидалось.
- p1 — A — черный, B — синий, перекрытие AB — зеленый
- p2 — A черный, B синий, зеленого нет, так как A полностью внутри B, поэтому он просто черный
- p3 — A черный, B синий, но поскольку A и B полностью перекрываются, A полностью находится поверх B, поэтому все черное.
Может быть, использовать прозрачность, как показано ниже:
fit <- euler(c("A" = 0, "B" = 0, "Aamp;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, "Aamp;B" = 5))
plot(fit, fills = list(fill = c("red", "green")), legend = list(side = "right"))
fit <- euler(c("A" = 0, "B" = 10, "Aamp;B" = 5))
plot(fit, fills = list(fill = c("red", "green")), legend = list(side = "right"))
Ответ №2:
Цвета используются по порядку. Если A=0
тогда нечего заполнять A
, то область for B
заполняется первым цветом (черным), а область for Aamp;B
— вторым цветом ( blue
). В третьем примере, A
и B
оба не имеют заливки, поэтому Aamp;B
вместо этого заполняется первым цветом.
Самое простое решение — просто удалить цвет (или несколько) из вектора, если у вас значение 0. Например.
# example 2
fit <- euler(c("A" = 0, "B" = 10, "Aamp;B" = 5))
p2 <- plot(fit,
fills = list(fill = c("blue", "green")),
labels = F)
Комментарии:
1. хм, хорошо, спасибо. поскольку мне нужно запустить несколько сотен диаграмм Венна, это не вариант. тогда нужно попытаться найти другое решение..
2. В ggplot2 вы можете использовать именованный вектор в качестве цветовой палитры для указания заливок для определенных групп, но я не могу найти аналогичный метод, который работает здесь
3. Я отредактировал свой первоначальный пример выше. каким-то образом это не просто заменяет первый цвет…
4. Спасибо. но я не совсем согласен с вами. 🙂 Я имею в виду, что не имеет смысла, что цвет в вашем примере в основном только оранжевый (если A = 0.000001), а когда A равно 0, он переключается на красный..