Network | 高颜值动态网络可视化工具(二)

1. 写在前面

上期介绍了network包和igprah包进行网络可视化的方法。
本期介绍tidygraph包和ggraph包,颜值极高!

号外!号外!文末 动态交互网络绘制教程!
[]~( ̄▽ ̄)~*

2. 用到的包

rm(list = ls())
library(tidyverse)
library(tidygraph)
library(ggraph)

3. 示例数据

用到的仍是上一次的示例数据,为Daniel van der Meulen在1585年收到的信件所组成,
包括writer,source, destinationdate

load("network.Rdata")
alt

4. 创建网络文件

用到的函数是tbl_graph,方便大家从tibbledata frame格式的文件进行网络创建。

routes_tidy <- tbl_graph(nodes = nodes, edges = edges, directed = TRUE)

## 或者你也可以使用`as_tbl_graph`构建网络文件
routes_igraph_tidy <- as_tbl_graph(routes_igraph)

Note! tbl_graph功能与igraph包的graph_from_data_frame函数功能几乎一致, 这里也可以进行等价替换。

5. 修改网络文件

有时候我们会想修改已经建好的网络文件, 可以使用activate函数单独进行nodes文件或edges文件的修改。
这里我们将edges文件中的weight以降序进行排列。

routes_tidy %>% 
activate(edges) %>%
arrange(desc(weight))

6. 网络可视化

6.1 初步绘图
ggraph(routes_tidy) + 
geom_edge_link() +
geom_node_point() +
theme_graph()
alt

6.2 加上文字和图例
ggraph(routes_tidy, layout = "graphopt") + 
geom_node_point() +
geom_edge_link(aes(width = weight), alpha = 0.8) +
scale_edge_width(range = c(0.2, 2)) +
geom_node_text(aes(label = label), repel = TRUE) +
labs(edge_width = "Letters") +
theme_graph()
alt

6.3 水平排列
ggraph(routes_igraph, layout = "linear") + 
geom_edge_arc(aes(width = weight), alpha = 0.8) +
scale_edge_width(range = c(0.2, 2)) +
geom_node_text(aes(label = label)) +
labs(edge_width = "Letters") +
theme_graph()
alt

7. 动态交互网络

有时候我们会想做个交互网络,像Cytoscape软件一样实现单个节点的拖拽、排列等。
这里我们可以使用visNetworknetworkD3实现动态、交互网络的绘制。

首先加载相关包
library(visNetwork)
library(networkD3)

7.1 方法一

visNetwork包进行网络可视化

7.1.1初步绘制 ︿( ̄︶ ̄)︿
visNetwork(nodes, edges)
alt

7.1.2 更改排列方式

visNetwork包是支持igraph包的layout方式(具体layout可查看上期教程);
同时,你也可以使用visIgraph函数对igraph创建的网络对象直接可视化;

Note! visNetworkedges属性并不能通过scale进行缩放,所以我们先手动调整一下edges的宽度。

edges <- mutate(edges, width = weight/5 + 1)

使用igraph包的layout_with_fr进行排列 (~ ̄▽ ̄)~

visNetwork(nodes, edges) %>% 
visIgraphLayout(layout = "layout_with_fr") %>%
visEdges(arrows = "middle")
alt

7.2 方法二

networkD3包可视化网络

7.2.1 整理数据

Note! 这里需要注意的是,networkD3输入文件的ID需要从0开始计数;
这里我们重新更改一下ID

nodes_d3 <- mutate(nodes, id = id - 1)
edges_d3 <- mutate(edges, from = from - 1, to = to - 1)

7.2.2 网络可视化

visNetwork()不同,forceNetwork函数含有更多的图形参数;
配色很好看,颜值也非常高!

(o゜▽゜)o☆[BINGO!]

forceNetwork(Links = edges_d3, Nodes = nodes_d3, 
Source = "from", Target = "to",
NodeID = "label", Group = "id", Value = "weight",
opacity = 1, fontSize = 16, zoom = TRUE)
alt

alt
最后祝大家早日不卷!~

点个在看吧各位~ ✐.ɴɪᴄᴇ ᴅᴀʏ 〰

alt

本文由 mdnice 多平台发布

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是基于Python的常用网络可视化工具代码: 1. Matplotlib + NetworkX ```python # 导入所需的库 import networkx as nx import matplotlib.pyplot as plt # 创建一个无向图 G = nx.Graph() # 添加节点 G.add_node("A") G.add_node("B") G.add_node("C") G.add_node("D") # 添加边 G.add_edge("A", "B") G.add_edge("A", "C") G.add_edge("B", "D") G.add_edge("C", "D") # 绘制图形 pos = nx.spring_layout(G) nx.draw_networkx_nodes(G, pos, node_color='lightblue', node_size=500) nx.draw_networkx_edges(G, pos, edge_color='gray') nx.draw_networkx_labels(G, pos, font_size=16, font_family='sans-serif') # 显示图形 plt.axis('off') plt.show() ``` 2. Plotly ```python # 导入所需的库 import plotly.graph_objs as go import networkx as nx # 创建一个无向图 G = nx.Graph() # 添加节点 G.add_node("A") G.add_node("B") G.add_node("C") G.add_node("D") # 添加边 G.add_edge("A", "B") G.add_edge("A", "C") G.add_edge("B", "D") G.add_edge("C", "D") # 绘制图形 pos = nx.spring_layout(G) edge_trace = go.Scatter(x=[], y=[], line=dict(width=0.5, color='#888')) for edge in G.edges(): x0, y0 = pos[edge[0]] x1, y1 = pos[edge[1]] edge_trace['x'] += tuple([x0, x1, None]) edge_trace['y'] += tuple([y0, y1, None]) node_trace = go.Scatter(x=[], y=[], text=[], mode='markers', hoverinfo='text', marker=dict(showscale=False, colorscale='YlGnBu', reversescale=True, color=[], size=20, colorbar=dict(thickness=15, xanchor='left', titleside='right'))) for node in G.nodes(): x, y = pos[node] node_trace['x'] += tuple([x]) node_trace['y'] += tuple([y]) node_trace['text'] += tuple([node]) node_adjacencies = [] node_text = [] for node, adjacencies in enumerate(G.adjacency()): node_adjacencies.append(len(adjacencies[1])) node_text.append('# of connections: '+str(len(adjacencies[1]))) node_trace['marker']['color'] = node_adjacencies node_trace['text'] = node_text # 绘制图形 fig = go.Figure(data=[edge_trace, node_trace], layout=go.Layout(title='<br>Network graph made with Python', titlefont=dict(size=16), showlegend=False, hovermode='closest', margin=dict(b=20,l=5,r=5,t=40), xaxis=dict(showgrid=False, zeroline=False, showticklabels=False), yaxis=dict(showgrid=False, zeroline=False, showticklabels=False))) fig.show() ``` 这些是常用的Python网络可视化工具,您可以根据自己的需求和数据来选择和调整网络图形。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值