有两个步骤:(1) 聚合数据,然后 (2) 转换为json。在那个示例页面中,所有的javascript代码都已经编写好了,所以你只需要插入转换后的json数据即可。
由于聚合后的数据应该具有类似于树形图的结构,因此我们可以使用treemap
软件包来进行聚合(也可以使用循环进行连续聚合)。然后,使用d3treeR
(来自github)将树状图数据转换为嵌套列表,并使用jsonlite
将列表转换为json。
我正在使用一些示例数据GNI2010
,它可以在d3treeR
包中找到。你可以在plunker上查看所有源文件。
library(treemap)
library(d3treeR)
library(data.tree)
library(jsonlite)
data(GNI2010)
indexList <- c('continent', 'iso3')
treedat <- treemap(GNI2010, index=indexList, vSize='population', vColor='GNI',
type="value", fun.aggregate = "sum",
palette = 'RdYlBu')
treedat <- treedat$tm
res <- d3treeR:::convert_treemap(treedat, rootname="flare")
json <- toJSON(res, auto_unbox = TRUE)
writeLines(json, "d3circle/flare.json")
我还替换了示例index.html
中的源代码行为:
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.5.5/d3.min.js"></script>
然后启动 index.html,您应该会看到
要创建亮闪闪的绑定(shiny bindings),可以使用 htmlwidgets
并参考一些示例(d3treeR
源代码中有一些)。请注意,某些功能可能无法正常工作,例如着色。这里存储的 json 实际上包含有关节点的大量信息(使用 treemap
聚合的所有数据),您可以在图表中利用这些信息。
data(GNI2010)
。 (2)最初 index.html 加载了一个空白页面,通过按照 这个 stackoverflow 答案 中描述的方法启动本地服务器解决了这个问题。 - Ericdata.tree
https://github.com/gluc/data.tree 用于聚合和树形操作。我发现它非常有帮助。 - timelyportfolio