我可以使用d3.js,dc.js和crossfilter创建一个HeatMap,使用CSV文件中的数据。
代码:
var chart = dc.heatMap("#test");
d3.csv("morley.csv", function(error, experiments) {
var ndx = crossfilter(experiments),
runDim = ndx.dimension(function(d) { return [+d.Run, +d.Expt]; }),
runGroup = runDim.group().reduceSum(function(d) { return +d.Speed; });
chart
.width(45 * 20 + 80)
.height(45 * 5 + 40)
.dimension(runDim)
.group(runGroup)
.keyAccessor(function(d) { return +d.key[0]; })
.valueAccessor(function(d) { return +d.key[1]; })
.colorAccessor(function(d) { return +d.value; })
.title(function(d) {
return "Run: " + d.key[0] + "\n" +
"Expt: " + d.key[1] + "\n" +
"Speed: " + (299000 + d.value) + " km/s";})
.colors(["#ffffd9","#edf8b1","#c7e9b4","#7fcdbb","#41b6c4","#1d91c0","#225ea8","#253494","#081d58"])
.calculateColorDomain();
chart.render();
});
但我想使用JSON数据做同样的事情,也许是一个带有一些json数据的数组。这似乎是一个noob问题,但我无法找到任何使用JSON数据进行热图的示例。
答案 0 :(得分:4)
如果您正在使用JSON文件,那么代码将基本相同,只需将d3.csv
替换为d3.json
。
如果数据已经在浏览器中加载,那么您可以删除此功能并运行:
var experiments = JSON.parse(json_object) //if json_object is still a string
var ndx = crossfilter(experiments)
,其余代码将是相同的。