簡體   English   中英

使用 VennDiagram 在 RStudio 查看器(不僅僅是寫入文件)中查看 venn.diagram?

[英]View venn.diagram in RStudio viewer (not just write to file) using VennDiagram?

使用VennDiagram package,我們可以使用venn.diagram() function像這樣制作維恩圖:

在此處輸入圖像描述

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中的任何示例。 ? venn.diagram文檔(它們似乎都寫入文件而不是在 RStudio 查看器中顯示)

這也應該完成這項工作。 為了便於閱讀,我刪除了 arguments:

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

來自?venn.diagram

文件名
圖像 output 的文件名,或者如果 NULL 返回網格 object 本身

看來,你幾乎可以控制任何事情。 再次文檔:

... 一系列調整 plot 的圖形參數。 詳情見下文

參數維恩大小 Class 描述
cex 1,2,3,4,5 數字向量給出每個區域的大小 label (長度 = 1/3/7/15 基於集合數)

因此我們需要能夠顯示grid對象。 plot()print()不做這項工作(似乎沒有print.grid() )。

我通常這樣做:

library(VennDiagram)
set.seed(1)
list1 <- list(A=sample(LETTERS, 12), B=sample(LETTERS, 12))
venn1 <- venn.diagram(list1, filename = NULL)
grid.newpage()
grid.draw(venn1)

我認為它仍然會將日志文件寫入工作目錄,但不會寫入圖表。

您可以像這樣並排放置兩個圖表:


library(gridExtra)
set.seed(2)
list2 <- list(A=sample(LETTERS, 16), B=sample(LETTERS, 12))
venn2 <- venn.diagram(list2, filename = NULL)
grid.arrange(gTree(children=venn1),
             gTree(children=venn2),
             ncol=2)

代表 package (v0.3.0) 於 2020 年 4 月 23 日創建

我想出了一個辦法——可能有更好的辦法。 這涉及寫入tempfile()而不是工作目錄中的文件,然后用幾行額外的代碼讀取它

注意:對原始代碼的唯一更改是添加

  • 開始處有 1 個額外的行temp_file <- tempfile()
  • filename = 'venn.png' filename = temp_file
  • 底部多出 3 行
# Libraries
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)

temp_file <- tempfile()

#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 = temp_file,
  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
)


# https://stackoverflow.com/a/20909108/5783745
library(png)
img <- readPNG(temp_file)
grid::grid.raster(img)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM