首页
学习
活动
专区
工具
TVP
发布

复杂树状网络的可视化

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

一、先看一个官方的例子

Flare

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

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

二、看看怎么画的

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

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

user-设备-user1

-user2

-user3

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

USER

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")

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

再复杂点,多加两个设备

USER

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")

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

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

CanadaPC

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")))

))

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

案例3:绘制层次聚类树

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

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

#进行聚类

hc

radialNetwork(as.radialNetwork(hc))

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

dendroNetwork(hc, height = 600)

dendroNetwork(hc, treeOrientation = "vertical")

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

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

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

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

Python或R学习

ID:Python_R_wu

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180611G212EA00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券