我正试图在ggplot中建立一个网络小区。两件事: 1)我需要将节点放在特定的(x,y)值上。这不是问题。2)网络情节是有指导的,但我需要能够显示从节点B到节点A的区别,而不是从节点A到节点B的差异。
这是我遇到麻烦的后一点。基本上,我需要抵消两条在节点之间并行运行的行。最终,线的权重将映射到某物上,但大致如下所示:

但是这些代码都是手工生成的(粘贴在下面以供参考)。我正试图在ggg图中完成偏移量,在这里,我已经有了节点位置的(x,y)对,以及(x,y)之间的连接的边缘列表。
offsetDf <- data.frame('x' = c(10, 40), 'y' = c(10, 30), 'startX' = c(13, 36.5), 'startY' = c(11, 29), 'endX' = c(37.5, 12), 'endY' = c(27, 13) )
ggplot(offsetDf, aes(x = x, y = y)) +
geom_point(size = 13) +
xlim(0,50) + ylim(0,50) +
geom_segment(aes(x = startX, y = startY, xend = endX, yend = endY),
arrow = arrow(length = unit(.3, 'cm')))我看过GGally和风水网,但它们都不像有任何东西能处理这个问题。我找到了一个构建了一些geom来实现这个功能的人--它有用于偏移和缩短段末端的输入(这样它们就不会一直指向节点)。它在这里的这个页面上(一直滚动到底部):再加上这样
但它不再起作用了。当我尝试使用它时,我得到一个错误读数:
eval中的错误(expr,envir,expr):找不到"eval“函数
做一些谷歌搜索,这似乎与最近一次对ggplot的重大改革有关(而且,作为一个程序员,我还没有足够的能力深入到引擎盖下,找出具体的修复方法)。有数以百计的地块,每个节点有10-20个节点,所以手工尝试和错误是不可能的。任何帮助都是非常感谢的。
发布于 2016-03-10 18:48:18
假设这是两个节点。
tempNodes <- data.frame ('x' = c(10, 40), 'y' = c(10, 30) )这些是有向线的端点(每个方向一个)。
data <- data.frame('x' = c(10,40), 'y' = c(10,30), 'xend' = c(40,10), 'yend' = c(30,10))然后,我总结了从'geom_segment_plus‘代码借用的数学,并得到了这个。
segementsDf <- function(data, shorten.start, shorten.end, offset){
data$dx = data$xend - data$x
data$dy = data$yend - data$y
data$dist = sqrt( data$dx^2 + data$dy^2 )
data$px = data$dx/data$dist
data$py = data$dy/data$dist
data$x = data$x + data$px * shorten.start
data$y = data$y + data$py * shorten.start
data$xend = data$xend - data$px * shorten.end
data$yend = data$yend - data$py * shorten.end
data$x = data$x - data$py * offset
data$xend = data$xend - data$py * offset
data$y = data$y + data$px * offset
data$yend = data$yend + data$px * offset
return(data)
}所以如果我把它分配给像这样的“临时”:
temp <- segementsDf(data, 2.5, 2.5, 2)然后我就可以在ggplot中运行它了:
ggplot(tempNodes, aes(x = x, y = y)) + geom_point(size = 12) + xlim(0,50) +
ylim(0,50) + geom_segment(data = temp, aes(x = x, xend = xend, y = y, yend = yend))我得到了这个(暂时没有箭头,但非常接近.我可以修补偏移量和结束值)。

超级笨重(我会清理它一点来匹配工作流),但现在它解决了这个问题。
https://stackoverflow.com/questions/35904363
复制相似问题