1

我使用二分包中的函数“plotweb”对二分网络进行了可视化。现在我想把标签用斜体(物种名称)。

plotweb(datamatrix)

我在此功能的帮助选项卡中找不到任何有用的命令。其他建议?

4

1 回答 1

0

不幸的是,bipartite::plotweb似乎不允许这样的参数font = 3,它graphics::par代表斜体字体。

在这里,我建议两种解决方案:

1 - 将所有文本转换为斜体par(font = 3)

获得所需斜体字体的一种方法是强制图形设备的所有字体为斜体:

library(bipartite)

par(font = 3)
data(Safariland)
plotweb(Safariland)

完成一个图形并移至另一个图形后,您可以运行dev.off()以将图形参数切换为其默认原始值。或者保存默认值par并在需要时重写:

dpar <- par()

par(font = 3)
data(Safariland)
plotweb(Safariland)

par(dpar)

在此处输入图像描述

2 - 将情节转换为gTree对象并仅编辑您需要的内容(grid包装意识形态)

您可以将生成的图转换plotwebgTree对象。AgTree充当许多网格图形对象/组件(“grobs”)的容器列表。

然而,这个解决方案更加冗长和复杂。优点是您几乎可以进行任何您希望的微调。

library(bipartite)
library(gridGraphics)

data(Safariland)

# Creates a gTree object from the "usual" plot generated by `plotweb`
my_gTree <- grid.grabExpr(grid.echo(function() plotweb(Safariland)))
# View the structure of the newly created gTree object
View(my_gTree)

# Example of editing the font of the text grobs in the range 28-36, 
# that is, the bottom labels (use regular expression)
my_gTree <- editGrob(grob = my_gTree,
                     gPath = "graphics-plot-1-text-2[8-9]|3[0-6]", 
                     gp = gpar(font = 3L),
                     grep = TRUE,
                     global = TRUE)
# Plot the edited graph
grid.newpage(); grid.draw(my_gTree)

如果你愿意,你可以保存它ggplot2::ggsave()

library(ggplot2)
ggsave(filename = "plotweb-grid-version-trial.png", plot = my_gTree)

在此处输入图像描述

如果要编辑特定标签,可以尝试:

my_gTree[["children"]][["graphics-plot-1-text-1"]][["gp"]][["font"]] <- 3L

此外,如果您想通过物种名称匹配某些 grob 标签,那么您可以执行以下操作,我只将“Aristotelia chilensis”和“Schinus patagonicus”物种更改为斜体。不幸的是,它变得令人费解,但它证明了可以使用包进行微调grid

# Get all grobs referring to species labels
label_grobs <- getGrob(gTree = my_gTree, 
                       gPath = "graphics-plot-1-text-.*", 
                       grep = TRUE, 
                       global = TRUE)
# Get the species labels
sp <- rep(NA_character_, length(label_grobs))
for (i in 1:length(label_grobs)){
  sp[i] <- label_grobs[[i]][["label"]]
}
# Edit only those grobs of desired species
sp_idx <- which(sp %in% c("Aristotelia chilensis", "Schinus patagonicus"))
for (i in sp_idx){
  grob_char <- paste0("graphics-plot-1-text-", i) 
  my_gTree[["children"]][[grob_char]][["gp"]][["font"]] <- 3L
}
# display and save the edited gTree
grid.newpage(); grid.draw(my_gTree)
ggsave(filename = "plotweb-grid-edit-by-species.png", plot = my_gTree)

在此处输入图像描述

于 2018-02-28T20:36:12.580 回答