GNU R, VennDiagram и составление диаграммы дополнения - PullRequest
2 голосов
/ 21 февраля 2012

Я работал над диаграммами Венна в GNU R. Я пытался использовать пакеты venneuler и VennDiagram. Я считаю, что VennDiagram имеет гораздо более детальный контроль, но, похоже, не хватает документации, чтобы заполнить все детали. Самый близкий, который я могу найти, является этим файлом PPT. http://www.ncbi.nlm.nih.gov/pmc/articles/PMC3041657/bin/1471-2105-12-35-S4.PPT, который я нашел по URL: http://www.ncbi.nlm.nih.gov/pmc/articles/PMC3041657/

Вот мои проблемы с использованием VennDiagram.

Для кода

require(VennDiagram)
venn.diagram(list(B = 1:2000, A = 200:400),fill = c("yellow", "blue"), 
alpha = c(0.8, 0.8), cex =1.5, cat.pos=0, cat.fontface = 4,
lty = 1, fontfamily =3, filename = "test001.jpeg");

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

Я могу сделать подмножество (следовательно, круг внутри круга). Но я не нахожу способ сделать следующее:

  1. Сделать BC, чтобы оно равнялось B ^ C. Нет, буквальное "B ^ C" не работает. Я думаю, что есть способ перемаркировать наборы в другом свойстве, но я не видел, как это сделать.
  2. Для размещения меток B ^ C и A ^ C внутри наборов, а не снаружи, как показано в данный момент. Я попытался cat.pos = "inner", но это не допустимое свойство. Я также пробовал cat.pos = c (0,0) в надежде, что смогу скормить его как X, Y, где X & Y от центра круга, но это не дало никаких других результатов.

Благодаря DWin, вот код для завершения моей диаграммы к упражнению. Предположим, что A ⊂ B. Покажите, что B c ⊂ A c .

require(VennDiagram)
plot.new()
venn.plot <- venn.diagram(
x = list(B = 1:200, A = 20:40), category.names= expression(B, A), 
          fill = c("yellow", "blue"), alpha = c(0.8, 0.8), cex =1.5, 
          cat.pos=0, cat.dist=c(-.1, -.1),  filename = NULL) ;
grid.draw(venn.plot); # grid graphic requires explicit print or draw operation
grid.text(expression(B^c),x=0.2,y=0.95)
grid.text(expression(A^c),x=0.16,y=0.95)
grid.text(expression(A^c),x=0.16,y=0.75)

1 Ответ

1 голос
/ 21 февраля 2012

Возможно, что-то вроде этого:

 venn.diagram(list(B = 1:200, A = 20:40), category.names= expression(B^c, A), 
            fill = c("yellow", "blue"), alpha = c(0.8, 0.8), cex =1.5, cat.pos=0, 
            cat.dist=c(.1, -.1), cat.fontface = 4,lty = 1, fontfamily =3,
            filename = "test001.jpeg")

Чтобы получить метки внутри кругов, поставьте 'cat.dist' с отрицательными значениями.Хитрость в том, что контрольная точка - это радиальное расстояние от границы в 12 часов, а не от центра.В документации говорится, что аргумент category.names интерпретируется с использованием синтаксиса plotmath.Надстрочная операция в plotmath выполняется с помощью оператора «^».Я переместил «А» внутрь, оставив B ^ c снаружи, чтобы предположить, что это область вне круга В, которая помечена. (Я также улучшил время построения, уменьшив пример.) Я попытался нарисовать три метки.но это не похоже на «часть пакета».

enter image description here

Вот способ, которым вы можете аннотировать с помощью grid.text() на экране устройства:

plot.new()
venn.plot <- venn.diagram(
 x = list(B = 1:200, A = 20:40), category.names= expression(B^c, A), 
          fill = c("yellow", "blue"), alpha = c(0.8, 0.8), cex =1.5, 
          cat.pos=0, cat.dist=c(.05, -.1),  filename = NULL) ;
 grid.draw(venn.plot); # grid graphic requires explicit print or draw operation
 grid.text("B",x=0.8)
# then you can save to file
...