网络可视化问题

时间:2016-11-25 06:20:38

标签: r plot graph igraph networkd3

我有一个large dataset,而且有两列fromto。我正在尝试生成一个简单的网络图来可视化这两列中各个元素之间的关系,所以我尝试了下面这个简单的例子。

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 dataset中有1500行/观察值。然而,simpleNetwork函数正在产生一个巨大的向日葵类型的各种关联可视化,这不是很愉快。

[网络图输出] [2]

我的问题是1)有没有更好的方法可视化这些数据2)我怎样才能至少为源节点着色目标节点?

非常感谢任何建议或建议。提前谢谢。

1 个答案:

答案 0 :(得分:1)

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

可视化不一定是没有意义的,但我会认为使用它们来证明一个教学点,而不是实际从它们中得出任何分析,你应该首先考虑你想要在grpah中想象的内容。

当您决定了什么能够提供所需的洞察力时,着色节点确实是一个关键的可视化工具: 至于问题的第二部分,在networkD3中,您应该使用NodeGroup参数来为节点着色。在igraph中,当使用V(graph)$color进行绘图时,您将向量分配给vertex.col,并在sna-package中为参数gplot()分配。

这里的示例图表是通过距离A中的A的距离着色的:

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)