2014-02-11 4 views
2

Я пытаюсь добавить проценты к каждому разделу моей диаграммы Venn. Я попытался использовать пасту, чтобы объединить заголовки круга с процентами. Однако, к сожалению, это не полностью работает, поскольку оно предоставляет только проценты для каждой из независимых групп и не дает процентных значений для каждого из перекрестков, так как пересечения не имеют названий. В идеале я хотел бы, чтобы процент находился внутри круга. Например, я хотел бы, чтобы тройное пересечение в середине (работа, учеба, игра) означало «83, 20.54%» вместо того, что в настоящее время обозначает, «83.»Добавление процентов к диаграммам Венна в R

Ниже приведен простой пример кода, чем я работаю с:

g = draw.triple.venn(
    area1 = 396, 
    area2 = 273, 
    area3 = 147, 
    n12 = 266, 
    n23 = 86, 
    n13 = 143, 
    n123 = 83, 
    category = c("Study", "Work", "Play"), 
    fill = c("blue", "red", "green"), 
    euler.d=TRUE, 
    scaled=TRUE, ind = FALSE, 
) 

require(gridExtra) 
grid.arrange(gTree(children=g), main="Title", sub="subtitle") 

ответ

3

В настоящее время VennDiagram::draw.triple.venn имеет метки клеток жестко закодированные как числа. Для изменения этого значения по умолчанию нет переключателей. Это довольно легко взломать после определения места, где определены метки. Изменение:

cell.labels <- areas 

To:

draw.triple.venn2 <- function(.... 
     ..... 
cell.labels <- paste0(areas," : ", round(100*areas/sum(areas), 1), "%") 
     ..... 
    } 

png(); 
print(grid.arrange(gTree(children=g), main="Title", sub="subtitle")); 
dev.off() 

enter image description here

Я определил draw.triple.venn2 функции и вставил "2" в вашем коде и получил то, что вы видите выше.

+0

Мне очень жаль, но я до сих пор не могу заставить его работать. Как вы определяете функцию draw.triple.venn2? – user3209543

+0

Наверное, мне нужно знать уровень комфорта при взгляде на источник и редактировании кода функций, определенных в чистом R. –

2

Ответ на BondedDust был невероятно полезен для меня. К сожалению, я не могу выдвинуть свой ответ из-за отсутствия репутации или добавить комментарий к комментарию, поэтому я напишу его здесь.

Чтобы расширить свое решение на BondedDust, у меня была такая же проблема, как у пользователя, и я обнаружил, что простой способ изменить функцию VennDiagram по умолчанию состоит в том, чтобы просто добавить эту строку в код (после загрузки библиотеки VennDiagram):

body(draw.triple.venn)[[78]] <- substitute(cell.labels <- paste0(areas," : ", round(100*areas/sum(areas), 1), "%")) 

Надеется, что это помогает

Ссылки:

  1. https://stackoverflow.com/a/2458377/3881613
  2. https://stackoverflow.com/a/2485556/3881613
1

При окрашивании процентов на графике, это лучше для вас, чтобы использовать ручной текст вложения, так как он является простым и достаточно гибким, чтобы добавить все, что вы хотите. Пример перечислены ниже:

library('VennDiagram') 
plot.new() #locator can be used in a plot graph but not a venn graph, so first make a brand new plot graph 
draw.single.venn(area = 22, category = "Dog People") 
text(locator(1),'Outlier',adj=0) 
1

В настоящее время, пакет Диаграмма Венна теперь поддерживает print.mode аргумент, который может быть изменен на «процент», чтобы отобразить проценты внутри диаграммы Венна. Например:

example.list = list(A=1:10, B=6:15, C=c(10, 16:20)) 
venn.grid = venn.diagram(example.list, filename=NULL, print.mode="percent") 
grid.draw(venn.grid) 

enter image description here

+0

Ваш ответ был бы значительно улучшен, если бы вы могли привести краткий пример. –

+0

Я добавил пример. –

Смежные вопросы