裁剪蜂巢图

时间:2014-09-01 11:03:34

标签: r

我一直在试验HiveR并成功创建了一个蜂巢图,它代表了我正在使用的数据集之一。数据的原始图表是经典的毛球:

enter image description here

然而,蜂巢图提供了更简单,更直观的数据视图:

enter image description here

然而,问题在于绘图仅占据画布的相对较小的部分。我已经尝试了各种技巧来裁剪它,以便情节占据了大部分框架,但它们都没有成功。最有希望的选择是将绘图写入pdf或eps文件,然后使用pdfcrop或epstool来修剪空白区域,但它们都没有在实践中工作。我怀疑情节中有一些看不见的元素会使边界框膨胀。

有没有人对如何有效地减少这个阴谋有任何想法? [我知道我可以手动完成,但我必须制作一些这样的情节,我正在寻找一种系统/程序化的方法来实现它。]

可以找到蜂巢图的数据结构here

非常感谢, 安德鲁。

以下是创建情节的代码:

set.seed(3)

VERTICES <- 512

library(igraph)

big.graph <- barabasi.game(VERTICES, power = 1,
                           out.seq = sort(sample(c(1, 2, 3, 4), VERTICES, replace = TRUE,
                                                 prob = c(0.1, 0.7, 0.1, 0.1))),
                           directed = FALSE, out.pref = TRUE)
library(HiveR)
library(digest)

V(big.graph)$name <- sapply(1:VERTICES, function(n) {digest(n, algo = "crc32", serialize = TRUE)})

big.matrix <- get.adjacency(big.graph, type= "lower", attr=NULL, names=TRUE, sparse=FALSE)

colnames(big.matrix) <- V(big.graph)$name
rownames(big.matrix) <- colnames(big.matrix)

hive <- adj2HPD(big.matrix, axis.cols = "black")
hive <- mineHPD(hive, option = "rad <- tot.edge.count")
hive <- mineHPD(hive, option = "axis <- source.man.sink")

summary = sumHPD(hive, chk.all = TRUE, plot.list = TRUE)
#
occluding = subset(summary, n1.ax == n2.ax & n1.rad == n2.rad)
occluding = unique(c(as.character(occluding$n1.lab), as.character(occluding$n2.lab)))
#
hive$nodes$radius = ifelse(hive$nodes$lab %in% occluding, jitter(hive$nodes$radius), hive$nodes$radius)

library(grid)

plotHive(hive, bkgnd = "white")

1 个答案:

答案 0 :(得分:1)

我要做的是使用pdfcrop。

knitr有一个出色的函数plot_crop,可以很好地为你工作。

您可能需要安装pdfcrop / ImageMagick,但这将允许您以编程方式生成这些图并删除空白。

pdf("graph.pdf")
plotHive(hive, bkgnd = "white")
dev.off()

library(knitr)
plot_crop("graph.pdf")