有没有一种方法可以在R中制作漂亮的“流动地图”或“线形面积”图形?

9
我正在尝试找到一种方法在R中直接重新创建这些图表(而不是在我完成R分析后手动使用Inkscape绘制它们):
第一个似乎应该很简单,但我找不到符合我的需求的东西......第二个更加复杂,但也似乎可以做到。
这篇文章Graph flow chart of transition from states已经让我接近了(已经很棒了,只是我不一定有一个正方形矩阵,并且我想根据自己的数据指定线条的起始/结束位置并控制粗细和透明度)......
是否可能使用ggplot(或者像lattice这样的其他东西,如果它看起来不错)?

1
可能会用到的链接:http://blog.revolutionanalytics.com/2013/02/visualizing-networks-in-r-arc-diagrams-and-hive-plots.html 和 http://drunks-and-lampposts.com/2013/01/03/lazy-d3-on-some-astronomical-data/ - Tyler Rinker
对于左边的部分,可能是这个链接:https://dev59.com/BWQo5IYBdhLWcg3wXeb5#16113802 - agstudy
@Tyler - 我真的很喜欢arcdiagram包 - 感谢你向我指引它! - CJH
@agstudy - 是的,那就是我在问题中提到的那个。问题是,它需要一个方阵(左边不能有7个项目,右边只有1个项目...必须相等)。 - CJH
1个回答

11

以下是一个使用基本图形功能(在网格图形中也有xspline函数,如果您想使用这些函数,但我不知道如何将它们与ggplot2结合使用,不过使用lattice可能不会太难)来开始制作左侧图形的示例:

plot.new()
par(mar=c(0,0,0,0)+.1)
plot.window(xlim=c(0,3), ylim=c(0,8))
xspline( c(1,1.25,1.75,2), c(7,7,4,4), s=1, lwd=32.8/4.5, border="#0000ff88", lend=1)
xspline( c(1,1.25,1.75,2), c(6,6,4,4), s=1, lwd=19.7/4.5, border="#0000ff88", lend=1 )
xspline( c(1,1.25,1.75,2), c(5,5,4,4), s=1, lwd=16.5/4.5, border="#0000ff88", lend=1 )
xspline( c(1,1.25,1.75,2), c(4,4,4,4), s=1, lwd=13.8/4.5, border="#0000ff88", lend=1 )
xspline( c(1,1.25,1.75,2), c(3,3,4,4), s=1, lwd= 7.9/4.5, border="#0000ff88", lend=1 )
xspline( c(1,1.25,1.75,2), c(2,2,4,4), s=1, lwd= 4.8/4.5, border="#0000ff88", lend=1 )
xspline( c(1,1.25,1.75,2), c(1,1,4,4), s=1, lwd= 4.5/4.5, border="#0000ff88", lend=1 )

text( rep(0.75, 7), 7:1, LETTERS[1:7] )
text( 2.25, 4, 'Tie strength')

图片描述

以下是使用一种略有不同的方法为右侧图形编写的初始代码:

plot.new()
par(mar=rep(0.1,4))
plot.window(xlim=c(0,7), ylim=c(-1,7))
text( 3+0.05, 0:6, 0:6, adj=0 )
text( 4-0.05, 0:6, 0:6, adj=1 )
lines( c(3,3),c(0-strheight("0"), 6+strheight("6")) )
lines( c(4,4),c(0-strheight("0"), 6+strheight("6")) )

xspline( c(3,1,3), c(0,3,6), s= -1, lwd=1, border="#00ff0055", lend=1 )
xspline( c(3,1.25,3), c(0,2.5,5), s= -1, lwd=4, border="#00ff0055", lend=1 )
xspline( c(4,4.5,4), c(5,5.5,6), s= -1, lwd=5, border="#ff000055", lend=1 )

enter image description here

您可以修改控制点、颜色等来更接近您想要的效果。其中的许多部分可以打包成一个函数,以自动化一些操作。


太好了 - 这个定义让我开始了!非常感谢。 - CJH

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接