2016-11-25 142 views
1

我有一个相当large dataset与两列from,to。我试图制作一个简单的网络图来显示这两列中各个元素之间的关系,所以我尝试了下面这个简单的例子。网络可视化问题

Source <- c("A", "A", "A", "A", "B", "B", "C", "C", "D") 
Target <- c("B", "C", "D", "J", "E", "F", "G", "H", "I") 
NetworkData <- data.frame(Source, Target) 

library(networkD3) 
simpleNetwork(NetworkData,linkColour="yellow") 

上面的例子和我的数据集之间的唯一区别是,我有在my dataset1500行/观测。然而simpleNetwork函数正在生成一个巨大的向日葵类型的各种关联可视化,这不是很愉快。

[网络图形输出] [2]

我的问题是1)是否有更好的方式来可视化这些数据2)我怎么能至少从源节点色的目标节点不同?

任何意见或建议,非常感谢。提前致谢。

+0

你对这个数据集有何洞察力?我的意思是,从一眼看去,似乎只有从/到节点'435.9'的连接,因此它成为“宇宙的中心” – lukeA

回答

1

要回答一般问题,问题的第一部分,根据您试图说明的内容,不同的可视化可能是有意义的。尝试获取网络的一些基本描述:边缘计数,密度,平均值。路径距离,你已经知道你在看什么样的关系数据。正如LukeA指出的那样,图形可视化的洞察力非常依赖于手头网络数据的结构!

可视化并不一定是毫无意义的,但我会承认使用它们来证明一个教学点,而不是从实际得出任何分析结果,你应该首先考虑你想要在grpah中想象的东西。

当你决定你会得到所需要的洞察力,着色节点确实是一个关键的可视化工具: 至于问题的第二部分,在networkD3你应该使用NodeGroup参数颜色节点。在igraph中,当使用gplot()进行绘图时,您将矢量指定为V(graph)$color,并在sna-package中指定参数vertex.col

这里是按距离从A中的igraph有色您的示例图:

Source <- c("A", "A", "A", "A", "B", "B", "C", "C", "D") 
Target <- c("B", "C", "D", "J", "E", "F", "G", "H", "I") 
NetworkData <- data.frame(Source, Target) 

# Visualize using igraph 
library(igraph) 
g <- graph_from_edgelist(as.matrix(NetworkData), directed = TRUE) 

# Colour by distance from first node: 
heatmap <- colorRampPalette(c("red", "yellow"))(100) 
distance.from.first.node <- distances(g, V(g)[1]) 
V(g)$color <- heatmap[1+round(distance.from.first.node/(max(distance.from.first.node)/(length(heatmap)-1)))] 

# Plot 
plot.igraph(g) 

我想不出任何点进行了密谋您所提供的数据,但如果你需要的话,那就是:

# Get the data you downloaded vvv(MAKE YOUR OWN PATH HERE)vvv 
data <- read.csv(file="Downloads/Network.txt", sep="|") 
# Remove your missing data 
data <- data[data[,1]!="",] 
data <- data[data[,2]!="",] 
g2 <- graph_from_edgelist(as.matrix(data), directed = TRUE) 

# Re-colour and plot: 
distance.from.first.node <- distances(g2, V(g2)[1]) 
V(g2)$color <- heatmap[1+round(distance.from.first.node/(max(distance.from.first.node)/(length(heatmap)-1)))] 

# Plot with smaller vertexes and no labels 
plot.igraph(g2, vertex.size=4, vertex.label=NA)