1

我上周确实发布了这个,但我没有正确解释它,我希望你们中的一些人能帮助我......

我正在尝试将多层同心环绘制为图形的顶点。

在这里你可以找到我所做的简单版本,以及我想要做什么。请注意,边缘也应与顶点一起拖动。

这是前者的代码:

library(igraph)
g=graph.empty(4)
g[1,2]=T
g[3,4]=T
resColors=matrix(as.character(list("green","red","green","green","green","grey","grey",  "green","green","green","red","red","green","green","green","green","red","red","green","green")), nrow=vcount(g))
colors = list()
values = list()
for (i in 1:vcount(g)) {
   values[[i]] = rep(1, times = ncol(resColors))
   colors[i] = list(resColors[i,])
}
size=c(60,50,30,20)
plot(g, vertex.shape = "pie", vertex.pie = values, vertex.pie.color = colors, vertex.size = size)

谢谢,纳特

4

2 回答 2

0

这可能会让您开始使用基础 R。如果您希望箭头接触饼图,则需要更多地使用布局和箭头。

par(mar=c(1,1,1,1)); 
layout(matrix(c(0,0,0,0,0,0,0,
                0,0,0,0,0,0,0,
                1,1,1,1,6,6,0, 
                1,2,2,5,5,6,0, 
                1,2,2,1,0,0,0, 
                1,1,1,3,0,0,0, 
                0,0,0,0,3,0,0, 
                0,0,0,0,0,3,4, 
                0,0,0,0,0,4,4), nrow=9, byrow=TRUE)); 

pie(x=c(0.4,0.3,0.2,0.1), labels = NA); 
pie(x=c(0.4,0.3,0.2,0.1), labels = NA); 

plot(x=1, y=1, type='n', axes = FALSE, xlim = c(0,100), ylim = c(0,100))
arrows(x0=0, y0=100, x1 = 80, y1 = 20, length=0.25)

pie(x=c(0.4,0.3,0.2,0.1), labels = NA); 

plot(x=1, y=1, type='n', axes = FALSE, xlim = c(0,100), ylim = c(0,100))
arrows(x0=0, y0=0, x1 = 80, y1 = 90)

pie(x=c(0.4,0.3,0.2,0.1), labels = NA);

在此处输入图像描述

或者,也许有一种方法可以混合和匹配来自不同包的图和图像,这可以在这种情况下提供帮助。请参见此处:在 R 图形窗口中组合基本图形和 ggplot 图形

编辑:

如果您只使用一个plot语句,而不是上面示例中的两个语句,并用那个不可见的图填充整个语句,layout那么您可以添加任意数量的语句arrows。重要的是,您可能会arrows通过为每个箭头提供的 x 和 y 坐标对它们的位置进行非常精细的控制。您可以将图表添加到pie图表之上,plot并且可以通过反复试验轻松arrows地触摸图表。pie

于 2013-09-17T06:48:08.837 回答
0

解决方案比我简单,以防其他人需要答案:

在绘图之前,您调用一个布局 fuchterman.reingold 作为示例:

lay <- layout.fruchterman.reingold(g)

然后编辑lay,在示例中,您希望节点1上的节点3:

lay[3,] <- lay[1,]

最后,您使用编辑后的布局进行绘图:

plot(g, vertex.shape = "pie", vertex.pie = values, vertex.pie.color = colors, 
     vertex.size = size, layout = lay)
于 2014-03-05T03:38:50.707 回答