【问题标题】:When using igraph in R, edge curves not smooth at all在 R 中使用 igraph 时,边缘曲线根本不平滑
【发布时间】:2017-11-25 04:36:42
【问题描述】:

这听起来像是问题的一个很小的细节,但是我试图让这个图表看起来尽可能干净,并且感谢任何反馈。我正在为篮球创建 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 做到这一点?对此的任何帮助表示赞赏,谢谢!

【问题讨论】:

    标签: r graph igraph


    【解决方案1】:

    如果您想在屏幕上获得更好的画面,我没有任何帮助。但是,如果您尝试保存图片(比如包含在论文或 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()

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-05-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-13
      • 2019-03-22
      相关资源
      最近更新 更多