复杂树状网络的可视化

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/kl28978113/article/details/84338356

image

基于R语言networkD3包实现,可以非常方的画一般的树状图或者层次聚类数状图,很多时候,需要表达关联关系或者层次关系,树状图是一种非常好的可视化图形。下面教大家怎么构造数据结构并画出图形。

一、先看一个官方的例子

Flare <- jsonlite::fromJSON("https://gist.githubusercontent.com/mbostock/4063550/raw/a05a94858375bd0ae023f6950a2b13fac5127637/flare.json",simplifyDataFrame = FALSE)

radialNetwork(List = Flare, fontSize = 10, opacity = 0.9, margin=0,nodeColour = "#00E5EE",linkColour = "#00EEEE")

image

diagonalNetwork(List = Flare, fontSize = 10, opacity = 0.9, margin=0,nodeColour = "#00E5EE",linkColour = "#00EEEE")

image

二、看看怎么画的

案例1:用户关联的设备,然后关联新用户

画这个图的难点在于数据结构的构造,需要用到R语言的列表,入门的时候不是很理解,其实列表就是向量的一种变形,下面看个非常简单的例子:

user-设备-user1

                -user2

                -user3

就是通过一个用户关联出设备,然后用设备关联出新的人,看看数据结构是怎么构造的

USER <- list(name = "user", children = list(

               list(name = "设备",

                    children = list(list(name = "user1"),

               list(name = "user2"),

               list(name = "user3")

))))

diagonalNetwork(List = USER, fontSize = 10, opacity = 0.9, margin=0,nodeColour = "#00E5EE",linkColour = "#00EEEE")

image

       

radialNetwork(List = USER, fontSize = 10, opacity = 0.9, margin=0,nodeColour = "#00E5EE",linkColour = "#00EEEE")

image

再复杂点,多加两个设备

USER <- list(name = "user", children = list(

               list(name = "设备1",

                    children = list(list(name = "user1"),

               list(name = "user2"),

               list(name = "user3")

)),

               list(name = "设备2",

                    children = list(list(name = "user1"),

               list(name = "user2"),

               list(name = "user3")

)),

               list(name = "设备3",

                    children = list(list(name = "user1"),

               list(name = "user2"),

               list(name = "user3")

))))

diagonalNetwork(List = USER, fontSize = 10, opacity = 0.9, margin=0,nodeColour = "#00E5EE",linkColour = "#00EEEE")

image

       

radialNetwork(List = USER, fontSize = 10, opacity = 0.9, margin=0,nodeColour = "#00E5EE",linkColour = "#00EEEE")

image

案例2:一个更复杂点的例子

CanadaPC <- list(name = "Canada", children = list(

               list(name = "Newfoundland",

                    children = list(list(name = "St. John's"))),

               list(name = "PEI",

                    children = list(list(name = "Charlottetown"))),

               list(name = "Nova Scotia",

                    children = list(list(name = "Halifax"))),

               list(name = "New Brunswick",

                    children = list(list(name = "Fredericton"))),

               list(name = "Quebec",

                    children = list(list(name = "Montreal"),

                                    list(name = "Quebec City"))),

               list(name = "Ontario",

                    children = list(list(name = "Toronto"),

                                    list(name = "Ottawa"))),

               list(name = "Manitoba",

                    children = list(list(name = "Winnipeg"))),

               list(name = "Saskatchewan",

                    children = list(list(name = "Regina"))),

               list(name = "Nunavuet",

                    children = list(list(name = "Iqaluit"))),

               list(name = "NWT",

                    children = list(list(name = "Yellowknife"))),

               list(name = "Alberta",

                    children = list(list(name = "Edmonton"))),

               list(name = "British Columbia",

                    children = list(list(name = "Victoria"),

                                    list(name = "Vancouver"))),

               list(name = "Yukon",

                    children = list(list(name = "Whitehorse")))

))

image

radialNetwork(List = CanadaPC, fontSize = 15, opacity = 0.9, margin=0,nodeColour = "#00E5EE",linkColour = "#00EEEE")

image

在层次聚类中,每个观测值自成一类,这些类每次两两合并,直到所有的类被聚成一类为止。常用的有单联动、全联动、平均联动、质心以及Ward方法。

使用的数据是,USArrests,结构如下:

image

#进行聚类

hc <- hclust(dist(USArrests), "ave")

radialNetwork(as.radialNetwork(hc))

image

diagonalNetwork(as.radialNetwork(hc), height = 700, margin = 50)

image

dendroNetwork(hc, height = 600)

image

dendroNetwork(hc, treeOrientation = "vertical")

image

dendroNetwork(hc, height = 600, linkType = "diagonal")

image

dendroNetwork(hc, treeOrientation = "vertical", linkType = "diagonal")

image

dendroNetwork(hc, textColour = c("red", "green", "orange")[cutree(hc, 3)],height = 600)

image

dendroNetwork(hc, textColour = c("red", "green", "orange")[cutree(hc, 3)], treeOrientation = "vertical")

image

转载:https://paper.tuisec.win/detail/78a9d550ee4e1e8

猜你喜欢

转载自blog.csdn.net/kl28978113/article/details/84338356
今日推荐