【问题标题】:R: Plot too large to fit into windowR:绘图太大而无法放入窗口
【发布时间】:2021-11-11 12:14:44
【问题描述】:

我用 igraph 包做了一个系统发育树图。 问题是,我的树太大而无法放入保存的图像中。 我正在使用 Rstudio,通常手动保存我的绘图。 对于较小的树,我可以放大 Rstudio 的绘图窗口以使绘图适合图像,而节点不会相互重叠。 不幸的是,这不适用于我的最新情节。 我试图用png()pdf()jpeg() 用不同的widthheight 保存它,但它仍然不合适。 节点相互重叠,或者图像中只有部分图可见。 到目前为止,我发现的唯一解决方案是减小标签大小。但最后,你什么也读不出来。

提前感谢您的帮助。

这是我的代码:

id <- c("Spirochaetota","Brachyspirae","Brevinematia","Leptospirae","Spirochaetia","sk6","Brachyspirales","Brachyspiraceae","Brachyspira",
      "Brevinematales","bo1","Brevinemataceae","Brevinema","bf2","Leptospirales","Leptonemataceae","Leptonema","lg2","Leptospiraceae","Leptospira",
      "LeptospiraA","LeptospiraB","lg3","lf1","Turneriellales","Turneriellaceae","Turneriella","tf1","Borreliales","Borreliaceae","Borrelia",
      "Borreliella","Sphaerochaetales","Sphaerrochaetaceae","Sphaerochaeta","SphaerochaetaA","sg15","SpirochaetalesA","SpirochaetaceaeA",
      "SpirochaetaA","sf1","SpirochaetalesC","Alkalispirochaetaceae","Alkalispirochaeta","Salinispiraceae","Salinispira","SpirochaetaD","sg1",
      "sf6","SpirochaetalesD","sdf1","SpirochaetalesE","SpirochaetaceaeB","Oceanispirochaeta","SpirochaetaE","SpirochaetaF","SpirochaetaG","sg2",
      "Treponematales","Treponemataceae","Treponema","TreponemaB","TreponemaC","TreponemaD","TreponemaF","tg7","TreponemataceaeB","TreponemaE",
      "TreponemaG","TreponemaH","tg5","tf3","so11")

links <- data.frame(from = c("Spirochaetota","Spirochaetota","Spirochaetota","Spirochaetota","Spirochaetota","Brachyspirae",
                "Brachyspirales","Brachyspiraceae","Brevinematia","Brevinematia","Brevinematales","Brevinemataceae",
                "Brevinematales","Leptospirae","Leptospirales","Leptonemataceae","Leptonemataceae","Leptospirales",
                "Leptospiraceae","Leptospiraceae","Leptospiraceae","Leptospiraceae","Leptospirales","Leptospirae",
                "Turneriellales","Turneriellaceae","Turneriellales","Spirochaetia","Borreliales","Borreliaceae",
                "Borreliaceae","Spirochaetia","Sphaerochaetales","Sphaerrochaetaceae","Sphaerrochaetaceae","Sphaerrochaetaceae",
                "Spirochaetia","SpirochaetalesA","SpirochaetaceaeA","SpirochaetalesA","Spirochaetia","SpirochaetalesC",
                "Alkalispirochaetaceae","SpirochaetalesC","Salinispiraceae","Salinispiraceae","Salinispiraceae","SpirochaetalesC",
                "Spirochaetia","SpirochaetalesD","Spirochaetia","SpirochaetalesE","SpirochaetaceaeB","SpirochaetaceaeB",
                "SpirochaetaceaeB","SpirochaetaceaeB","SpirochaetaceaeB","Spirochaetia","Treponematales","Treponemataceae",
                "Treponemataceae","Treponemataceae","Treponemataceae","Treponemataceae","Treponemataceae","Treponematales",
                "TreponemataceaeB","TreponemataceaeB","TreponemataceaeB","TreponemataceaeB","Treponematales","Spirochaetia"),
                to = c("Brachyspirae","Brevinematia","Leptospirae","Spirochaetia","sk6","Brachyspirales",
                       "Brachyspiraceae","Brachyspira","Brevinematales","bo1","Brevinemataceae","Brevinema",
                       "bf2","Leptospirales","Leptonemataceae","Leptonema","lg2","Leptospiraceae",
                       "Leptospira","LeptospiraA","LeptospiraB","lg3","lf1","Turneriellales",
                       "Turneriellaceae","Turneriella","tf1","Borreliales","Borreliaceae","Borrelia",
                       "Borreliella","Sphaerochaetales","Sphaerrochaetaceae","Sphaerochaeta","SphaerochaetaA","sg15",
                       "SpirochaetalesA","SpirochaetaceaeA","SpirochaetaA","sf1","SpirochaetalesC","Alkalispirochaetaceae",
                       "Alkalispirochaeta","Salinispiraceae","Salinispira","SpirochaetaD","sg1","sf6",
                       "SpirochaetalesD","sdf1","SpirochaetalesE","SpirochaetaceaeB","Oceanispirochaeta","SpirochaetaE",
                       "SpirochaetaF","SpirochaetaG","sg2","Treponematales","Treponemataceae","Treponema",
                       "TreponemaB","TreponemaC","TreponemaD","TreponemaF","tg7","TreponemataceaeB",
                       "TreponemaE","TreponemaG","TreponemaH","tg5","tf3","so11"))

net <- graph_from_data_frame(d = links, vertices = id, directed = T)

lay = layout.reingold.tilford(net)

plot(net, vertex.shape = "none", 
     vertex.label.font = 3,
     vertex.label.cex = 0.3,
     edge.arrow.size = 0.3,
     rescale = F,
     ylim = c(0.7,3.4),xlim = c(-8,23.2), asp = 0,
     layout = lay)

如果一切正常,它应该看起来类似于这棵较小的树。这个不包括上面代码的节点:

这是我到目前为止的大树的结果。它包含上面代码中的节点:

到目前为止,我想出的唯一解决方案是以某种方式将绘图放入绘图面板并将其保存为 SVG 文件。之后,我使用inkscape对其进行了编辑:

【问题讨论】:

  • 原则上显示绘图是有效的,但由于标签重叠或只有一部分可见,因此无法读取任何内容。我尝试调整绘图面板的大小,但绘图仍然太大。现在我正在尝试使用边距。到目前为止,它不起作用。

标签: r plot tree igraph


【解决方案1】:

您可以将树形图绘制为树状图。 从左到右绘制允许将所有分类单元标签放在一个可读的列中:

library(igraph)
net <- graph_from_data_frame(d = links, vertices = id, directed = F)
lay <- layout.reingold.tilford(net)

plot_dendrogram(cluster_fast_greedy(net))

还有:

links %>%
  graph_from_data_frame() %>%
  as_adjacency_matrix() %>%
  dist() %>%
  hclust() %>%
  as.dendrogram() %>%
  plot()

【讨论】:

  • 我也试过这个,但不幸的是它没有显示分类群之间的正确联系。
  • @Mittens 我的第二个代码是否产生了正确的连接?
  • 很遗憾没有。我在我的问题中添加了一个我的小树的例子。
  • 您的示例数据不包含节点Spirochaetales。仅限 SpirochaetalesASpirochaetalesC
  • 是的,这是真的。它不包含在大树中。示例图像旨在显示树的主要结构。必须有不同的层次
猜你喜欢
  • 1970-01-01
  • 2016-02-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-16
  • 2011-09-09
  • 1970-01-01
相关资源
最近更新 更多