Пропорциональная диаграмма Венна и цветовая штриховка с полупрозрачностью

У меня есть следующий тип данных подсчета.

A   450
B   1800
A and B both    230

Я хочу создать красочную (возможно, полупрозрачную на перекрестках), как на следующей диаграмме Венна.

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

Примечание. Этот рисунок представляет собой пример, нарисованный от руки в PowerPoint, и не в масштабе.


person jon    schedule 03.01.2012    source источник
comment
Почему бы не начать с library("sos"); findFn("venn") и не посмотреть, как далеко это вас зайдет?   -  person Ben Bolker    schedule 03.01.2012
comment
Или используйте пакет venneuler, он делает это   -  person Simon Urbanek    schedule 03.01.2012


Ответы (7)


Вот сообщение, в котором обсуждается диаграмма Венна из списка кластеров и сопутствующие факторы.

Для простого решения используйте пакет venneuler:

require(venneuler)
v <- venneuler(c(A=450, B=1800, "A&B"=230))
plot(v)

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

Для получения более продвинутых и индивидуальных решений проверьте пакет VennDiagram.

library(VennDiagram) 
venn.diagram(list(B = 1:1800, A = 1571:2020), fill = c("lightblue", "green"), 
             alpha = c(0.5, 0.5), lwd =0, "venn_diagram.tiff")

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

person Geek On Acid    schedule 03.01.2012
comment
@John: хорошим тоном является сначала внимательно прочитать файлы справки для VennDiagram и venneuler, а уже потом спрашивать о форматировании или других параметрах. - person Carl Witthoft; 03.01.2012
comment
@John, в то время как venneuler не имеет аргумента границы, вы можете рисовать круги на основе значения объекта venneuler (у вас есть центры и диаметры), которые образуют границу. Я подозреваю, что это не так уж и сложно реализовать в функции. - person Roman Luštrik; 03.01.2012
comment
@Roman: для кругов можно использовать draw.circle () из пакета plotrix. - person EDi; 03.01.2012
comment
Применяет ли пакет какую-либо логику к данным? Я дал ему это: v <- venneuler(c(A=100, B=100, "A&B"=50, C=100, "A&C"=25)), и он создал диаграмму, которая включала небольшое пересечение между B и C. - person SabreWolfy; 28.05.2012
comment
@SabreWolfy: Да, интересно, не уверен, приятель. Вероятно, вам нужно настроить некоторые параметры Веннейлера, чтобы избавиться от этого странного перекрытия ... - person Geek On Acid; 30.05.2012
comment
Попробуйте: v <- venneuler(c(A=450, B=1800, "A&B"=425)) plot(v) и обратите внимание, что перекрытие даже близко не подходит для исправления. Буква A должна быть почти полностью закрыта B. Я очень скептически отношусь к этому пакету. - person DunderChief; 08.10.2013
comment
@DunderChief Я также столкнулся с серьезными неточностями в этом пакете. Я написал обслуживающему персоналу по электронной почте, но ответа так и не получил. - person Gregor Thomas; 15.02.2015
comment
Это может вас заинтересовать относительно Venneuler: benfred.github.io/venn.js / tests / venneuler_comparison - person Johan Larsson; 12.04.2016

Недавно я опубликовал новый пакет R, eulerr, который делает то, что вы хотите. Он очень похож на Venneuler, но без его несоответствий.

library(eulerr)
fit <- euler(c(A = 450, B = 1800, "A&B" = 230))
plot(fit)

eulerplot

Или вы можете попробовать блестящее приложение для того же пакета r по адресу eulerr.co

шайни-эйлер

person Johan Larsson    schedule 24.10.2016
comment
Анимированное блестящее приложение заключило для меня сделку - person Megatron; 13.09.2017
comment
Отличная упаковка. Незначительный недостаток imho - это цветовая схема по умолчанию, которая использует белый цвет для первого набора и фона и, следовательно, не имеет контраста. Также предоставленный фрагмент кода не дает такого же результата с последней версией R / package. - person Holger Brandl; 06.03.2018
comment
Спасибо. Я обновил фрагмент кода и рисунок, который он генерирует. Я бы не согласился с вами по поводу цветовой схемы. Контраст с фоном обычно не является главной задачей, и белый цвет очень хорошо контрастирует с большинством других цветов и особенно с этикеткой на круге. - person Johan Larsson; 06.03.2018
comment
именно то, что я ищу! подскажите, как делать A & BnotC? - person lxcfuji; 02.05.2018
comment
Я был удивлен / сбит с толку этикетками количества по умолчанию. Я ожидал, что каждая метка счетчика будет показывать количество в этом регионе, а не общее, так что если вы сложите все отображаемые числа, вы получите общее N. В ваших примерах A равно 5, а только A равно 3. A&B равно 2, но A & BnotC - 1,5. B равно 3, но только B равно 1. Региональные области также не кажутся пропорциональными их количеству в этом отношении. - person Brian D; 08.03.2019
comment
@BrianD не всегда идеально подходит, поэтому иногда области на самом деле не полностью пропорциональны площади. Вы получите общее N, если сложите все площади. Это потому, что я выбрал непересекающиеся комбинации, а не объединения для ввода - person Johan Larsson; 09.03.2019
comment
вы также можете использовать набор данных: fit ‹- euler (data.frame (mtcars [, c (vs, am)]))› plot (fit) - person MatthewR; 07.04.2019
comment
Приведенный выше пакет venneuler требует Java, но этого не происходит, так что это было особенно приятно. - person a-h; 16.11.2020

Основываясь на втором ответе Geek On Acid, второе предложение (еще раз спасибо), я также смог бы решить проблему с линией. Я публикую, если это актуально для других гуглеров!

  require(VennDiagram)
    venn.diagram(list(B = 1:1800, A = 1571:2020),fill = c("red", "green"),
  alpha = c(0.5, 0.5), cex = 2,cat.fontface = 4,lty =2, fontfamily =3, 
   filename = "trial2.emf");

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

person jon    schedule 03.01.2012
comment
Привет, я использую vennDiagram(sub, cex=..,lwd=2,circle.col=...), и когда я пытаюсь fill, как вы упомянули, он предлагает: 1: "fill" is not a graphical parameter Это вопрос версии vennDiagram? Правильно ли вы «засыпаете» в этом случае? Большое спасибо - person PGreen; 12.03.2013
comment
@PGreen Я только что попробовал в R 2.15.2 с последней версией vennDiagram, у меня работает .... - person jon; 12.03.2013
comment
@PGreen Я подозреваю, что проблема в том, что вы используете vennDiagram из пакета limma, тогда как jon использует venn.diagram из пакета vennDiagram. VennDiagram не имеет аргумента заполнения, поэтому вы получаете сообщение об ошибке. - person sage88; 18.08.2013
comment
Можно ли печатать venn.diagram на графическом устройстве R по умолчанию вместо экспорта в tiff (для использования в документе rmarkdown)? - person rmf; 11.08.2017
comment
@rmf Для печати на графическом устройстве R выполните vennPlot = venn.diagram(..., filename=NULL); grid.newpage(); grid.draw(vennPlot) - person Holger Brandl; 06.03.2018

Хотя это не полностью отвечает на ваш вопрос. Я подумал, что это будет полезно для других людей, желающих построить диаграмму Венна. Можно использовать функцию venn () из пакета gplots: http://www.inside-r.org/packages/cran/gplots/docs/venn

## modified slightly from the example given in the documentation
## Example using a list of item names belonging to the
## specified group.
##
require(gplots) 
## construct some fake gene names..
oneName <- function() paste(sample(LETTERS,5,replace=TRUE),collapse="")
geneNames <- replicate(1000, oneName())

## 
GroupA <- sample(geneNames, 400, replace=FALSE)
GroupB <- sample(geneNames, 750, replace=FALSE)
GroupC <- sample(geneNames, 250, replace=FALSE)
GroupD <- sample(geneNames, 300, replace=FALSE)

venn(list(GrpA=GroupA,GrpB=GroupB,GrpC=GroupC,GrpD=GroupD))

введите описание изображения здесьПосле этого я просто добавляю цвета и прозрачность с помощью иллюстратора. введите описание изображения здесь

person ktyagi    schedule 10.04.2014
comment
Привет! Не могли бы вы подробно рассказать, что вы имеете в виду, используя иллюстратор? Вы имеете в виду Adobe Illustrator или есть способ получить диаграмму выше, просто используя R? - person Manuel Reis; 04.12.2014
comment
Извините, это моя ошибка! Я имею в виду использование Adobe Illustrator - person ktyagi; 18.02.2015

Существует интуитивно понятный и гибкий пропорциональный плоттер, который можно загрузить и запустить. Найдите его по адресу: http://omics.pnl.gov/software/VennDiagramPlotter.php

а также

jvenn: интерактивный просмотрщик диаграмм Венна - GenoToul Bioinfo: http://bioinfo.genotoul.fr/jvenn/

person Nirupa Chaudhari    schedule 15.06.2013

Я знаю, что OP спрашивает о решении в R, но я хотел бы указать на веб-решение под названием BioVenn. Он берет до 3 списков элементов и рисует диаграмму Венна, чтобы каждая поверхность была пропорциональна количеству элементов - например, эта:

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

На этой диаграмме я вручную (через PhotoShop) изменил расположение номеров, так как мне не нравились места, выбранные BioVenn. Но вы можете отказаться от номеров.

Теоретически списки, используемые с BioVenn, должны состоять из идентификаторов генов, но на практике это не имеет значения - списки просто должны содержать строки.

person Nick    schedule 14.02.2015
comment
На этой диаграмме я вручную (через PhotoShop) изменил расположение номеров, так как мне не нравились места, выбранные BioVenn. Но вы можете отказаться от номеров. Фактически, в BioVenn вы можете просто перетаскивать числа в любое место, куда хотите. Фотошоп не нужен :-) - person Tim Hulsen; 02.11.2015

FWIW: нашел этот пакет для Python, который делает то же самое.

person mithunpaul    schedule 29.09.2020