首页 > 解决方案 > 使用 VennDiagram 在 RStudio 查看器中查看 venn.diagram(不仅仅是写入文件)?

问题描述

使用这个VennDiagram包,我们可以用这样的venn.diagram()函数制作一个像这样的维恩图:

在此处输入图像描述

library(tidyverse)
library(hrbrthemes)
library(tm)
library(proustr)

# Load dataset from github
data <- read.table("https://raw.githubusercontent.com/holtzy/data_to_viz/master/Example_dataset/14_SeveralIndepLists.csv", header=TRUE) 
to_remove <- c("_|[0-9]|\\.|function|^id|script|var|div|null|typeof|opts|if|^r$|undefined|false|loaded|true|settimeout|eval|else|artist")
data <- data %>% filter(!grepl(to_remove, word)) %>% filter(!word %in% stopwords('fr')) %>% filter(!word %in% proust_stopwords()$word)

# library
library(VennDiagram)

#Make the plot
venn.diagram(
  x = list(
    data %>% filter(artist=="booba") %>% select(word) %>% unlist() , 
    data %>% filter(artist=="nekfeu") %>% select(word) %>% unlist() , 
    data %>% filter(artist=="georges-brassens") %>% select(word) %>% unlist()
  ),
  category.names = c("Booba (1995)" , "Nekfeu (663)" , "Brassens (471)"),
  filename = 'venn.png',
  output = TRUE ,
  imagetype="png" ,
  height = 480 , 
  width = 480 , 
  resolution = 300,
  compression = "lzw",
  lwd = 1,
  col=c("#440154ff", '#21908dff', '#fde725ff'),
  fill = c(alpha("#440154ff",0.3), alpha('#21908dff',0.3), alpha('#fde725ff',0.3)),
  cex = 0.5,
  fontfamily = "sans",
  cat.cex = 0.3,
  cat.default.pos = "outer",
  cat.pos = c(-27, 27, 135),
  cat.dist = c(0.055, 0.055, 0.085),
  cat.fontfamily = "sans",
  cat.col = c("#440154ff", '#21908dff', '#fde725ff'),
  rotation = 1
)

这导致.png直接写入工作。

如何在 RStudio 查看器窗格中查看它,以及在 RMarkdown 文档等中使用它(即以相同的方式查看常规 ggplot 或基本图)?

另请注意,同样的问题适用于? venn.diagram文档中的任何示例(它们似乎都写入文件而不是显示在 RStudio 查看器中)

标签: r

解决方案


这也应该完成这项工作。我删除了可读性的论点:

...
plt <- venn.diagram(
  filename = NULL,
  cex = 1,
  cat.cex = 1,
  lwd = 2,
  )
grid::grid.draw(plt)

?venn.diagram

filename
图像输出的文件名,或者如果 NULL 返回网格对象本身

看来,你几乎可以控制任何事情。再次文档:

... 一系列调整情节的图形参数。详情见下文

参数 Venn Sizes 类 描述
cex 1,2,3,4,5 numeric Vector 给出每个区域标签的大小(长度 = 1/3/7/15 基于集合数)

因此我们需要能够显示grid对象。plot()并且print()不要做这项工作(似乎没有print.grid())。


推荐阅读