函数'plotweb'中的斜体,二分包R

时间:2017-07-12 13:45:04

标签: r bipartite italics

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

plotweb(datamatrix)

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

1 个答案:

答案 0 :(得分: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)

enter image description here

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

您可以将plotweb生成的绘图转换为gTree对象。 gTree充当许多网格图形对象/组件(“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)

enter image description here

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

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

此外,如果你想按物种名称匹配某些grob标签,那么你可以做类似下面的事情,在那里我只改为斜体“Aristotelia chilensis”&amp; “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)

enter image description here