(注意 - 这与using multiple size scales in a ggplot的工作相同,但我问的是另一个问题)
我正在尝试构建一个显示从一个类到另一个类的转换的图。我希望有圆圈代表每个类,箭头从一个类到另一个类代表转换。
我正在使用带箭头()的geom_segment来绘制箭头。有没有办法:
我无法获得position =“dodge”来做任何有用的事情。
举个例子:
library(ggplot2)
points <- data.frame( x=runif(10), y=runif(10),class=1:10, size=runif(10,min=1000,max=100000) )
trans <- data.frame( from=rep(1:10,times=10), to=rep(1:10,each=10), amount=runif(100)^3 )
trans <- merge( trans, points, by.x="from", by.y="class" )
trans <- merge( trans, points, by.x="to", by.y="class", suffixes=c(".to",".from") )
ggplot( points, aes( x=x, y=y ) ) + geom_point(aes(size=size),color="red",shape=1) +
scale_size_continuous(range=c(4,20)) +
geom_segment( data=trans[trans$amount>0.6,], aes( x=x.from, y=y.from, xend=x.to, yend=y.to ),lineend="round",arrow=arrow(),alpha=0.5, size=0.3)
答案 0 :(得分:4)
我认为既然没有人给出解决方案,我会提供更多针对此类问题的软件包示例:
vecs <- data.frame(vecs =1:6,size=sample(1:100,6))
edges <- data.frame(from=sample(1:6,9,replace=TRUE), to=sample(1:6,9,replace=TRUE))
library(igraph)
g <- graph.data.frame(edges, vertices = vecs, directed = TRUE)
coords <- cbind(sample(1:20,6), sample(1:20,6))
plot(g, vertex.size=V(g)$size,vertex.color="white",layout=coords,axes=TRUE)
这至少会在圆圈问题之前解决你的箭头,并且当有倒数箭头时,它会用2<->5
中的曲线调整它们:
(当然可以修改arrrow尺寸,线宽,颜色等)
答案 1 :(得分:3)
我已经将geom_segment的简单扩展放在一起,它允许指定
这里有关于pastebin的信息:geom_segment_plus。
我使用了以下代码:
ggplot( points, aes( x=x, y=y ) ) + geom_point(aes(size=size),color="red",shape=1) +
scale_size_continuous(range=c(4,20)) +
geom_segment_plus( data=trans[trans$amount>0.3,],
aes( x=x.from, y=y.from, xend=x.to, yend=y.to ),
lineend="round",arrow=arrow(length=unit(0.15, "inches")),
alpha=0.5, size=1.3,
offset=0.01, shorten.start=0.03, shorten.end=0.03)
这绝对不是完美的,但它确实有效 - 你可以在这里看到一个双箭头到达左下角。
offset,shorten.start和shorten.end是添加的aes元素。它们可以设置为数据点,但我还没弄清楚如何正确地缩放它们。