我想创建一个函数,绘制有顶点对齐的有向图,并在每个顶点下面添加一些文本,例如下面的示例图。绘图功能应该能够将饼图作为顶点处理,所以我在R中使用了igraph
包。
adjm <- matrix(c(0,1,0,1,
0,0,1,1,
0,0,0,1,
0,0,0,0), nrow=4, byrow=TRUE)
g1 <- graph.adjacency(adjm, mode="directed")
values <- lapply(1:4, function(x) sample(1:4,4))
windows(width=7, height=3.5)
plot(g1, layout=layout.grid(g1, width=4),
vertex.shape="pie", vertex.pie=values,
vertex.pie.color=list(heat.colors(4)),
edge.curved=TRUE,
vertex.label=LETTERS[1:4], vertex.size=50,
vertex.label.dist=5, vertex.label.degree=pi/2,
edge.label=1:5, rescale=FALSE,
xlim=c(-0.2,3.5), ylim=c(0,0.5))
我有两个问题。
为什么顶点标签越长,到顶点中心的距离越长,如下例所示?我可以强制它们出现在同一水平而无需手动查找和定义它们的正确距离吗?
windows(width=7, height=3.5)
plot(g1, layout=layout.grid(g1, width=4),
vertex.shape="pie", vertex.pie=values,
vertex.pie.color=list(heat.colors(4)),
edge.curved=TRUE,
vertex.label=c("A", "AA", "AAAA", "AAAAAA"), vertex.size=50,
vertex.label.dist=5, vertex.label.degree=pi/2,
edge.label=1:5, rescale=FALSE,
xlim=c(-0.2,3.5), ylim=c(0,0.5))
绘制对齐图时如何删除空白区域?如果我制作一个水平图形,它将被放置在窗口的底部,有很多空的空间。图像越平坦,图形越小,如第三个图中所示。 (似乎确定了图形的大小,使得图形适合任何位置,垂直或水平。)
plot(g1, layout=layout.grid(g1, width=4),
vertex.shape="pie", vertex.pie=values,
vertex.pie.color=list(heat.colors(4)),
edge.curved=TRUE,
vertex.label=c("A", "AA", "AAAA", "AAAAAA"), vertex.size=20,
vertex.label.dist=2, vertex.label.degree=pi/2, edge.label=1:5)
我可以编写参数asp=0
以使顶点在平坦的窗口中保持正确的大小,但自动曲率和顶点标签的位置会发生变化。我可以手动调整负上边距,标签距离和边缘曲率,但当然这不是通用函数的解决方案。到目前为止,最好的结果是rescale=FALSE
的结果与第一个图的代码一样,但是边缘曲率仍然太小,并且顶点越大,它们完全位于顶点后面。 (另外,顶点标签距离变化的问题仍然存在。)直接使用autocurve.edges
并没有给我任何曲率。接下来要尝试什么的想法?