在R中使用igraph时,边缘曲线根本不平滑

时间:2017-11-25 04:36:43

标签: r graph igraph

这可能听起来像一个问题的非常细微的细节,但是我试图让这个图表看起来尽可能干净,任何反馈都值得赞赏。我正致力于在R中为篮球创建网络图。我几天前发了这篇文章 - Draw beautiful network graphs in R - 显示了我试图模仿的图表类型。

使用igraph包,我能够在大多数情况下重新创建图形。以下示例,我正在使用的数据框:

library(igraph)
nba.nodes <- data.frame(id = c('s01', 's02', 's03', 's04', 's05'),
                        color = c('darkred', 'darkblue', 'darkgreen', 'darkorange',  'darkmagenta'),
                        names = c('Jarrett\nJack', 'Tim\nHardaway', 'Courtney\nLee', 'Kristaps\nPorzingis', 'Enes\nKanter'))

nba.edges <- data.frame(from = c('s01', 's01', 's01', 's01', 
                                 's02', 's02', 's02', 's02',
                                 's03', 's03', 's03', 's03',
                                 's04', 's04', 's04', 's04',
                                 's05', 's05', 's05', 's05'),
                        to = c('s02', 's03', 's04', 's05',
                               's01', 's03', 's04', 's05', 
                               's01', 's02', 's04', 's05',
                               's01', 's02', 's03', 's05',
                               's01', 's02', 's03', 's04'),
                        width = sample(1:12, 20, replace = TRUE))

nba.net <- graph_from_data_frame(d = nba.edges, vertices = nba.nodes, directed = T)

# ignore the layout = l, i have this commented out, was just testing it   
# l <- layout_in_circle(nba.net)
plot(nba.net, # layout = l,
     vertex.size = 20,
     edge.curved = 0.3, 
     vertex.label = V(nba.net)$names,
     vertex.label.dist = 4,
     vertex.label.font = 2)

正如您所看到的,情节很好,但我对edge.curved参数的工作方式非常不满意。而不是绘制一条平滑的曲线边缘线,类似于我所分享的链接中的图形,边缘是这些弯曲的线...越大我设置参数edge.curved,线越弯曲......不是我希望的曲线。

正如您所知,我共享的链接中的图形边缘看起来是完美的曲线(在它们具有圆的曲率的意义上是完美的)。有什么办法可以用igraph做到这一点吗?感谢任何帮助,谢谢!

1 个答案:

答案 0 :(得分:0)

如果你想在屏幕上看到更好的照片,我没有任何帮助。但是,如果您要保存图片(比如包含在纸张或PowerPoint中),您可以使用不同的图形设备获得没有锯齿的图片。尝试:

png('Graph.png', 500, 500, type='cairo')
plot(nba.net, # layout = l,
     vertex.size = 20,
     edge.curved = 0.3, 
     vertex.label = V(nba.net)$names,
     vertex.label.dist = 4,
     vertex.label.font = 2)
dev.off()

查找当前目录中的输出(使用getwd()