基于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
领取专属 10元无门槛券
私享最新 技术干货