我想在散点图上绘制一些值,但我不知道如何从数据中获取所需的值并在散点图上。我尝试了各种各样的东西,但我是d3的新手,所以它有点令人困惑。
我刚刚准备了一个小提琴,也许有人想看看它?
数据结构是
var data = [
{"name":"comp","arr":[[1493301233000, 123, 456], [1493301234000, 3, 4], [1493301235000, 5, 6]]},
{"name":"comp","arr":[[1493301236000, 11, 22]]},
{"name":"dogg","arr":[[1493301238000, 33, 55], [1493301239000, 66, 88]]}];
答案 0 :(得分:1)
希望这能让你开始。我更新了Crossfilter和dc版本,以便您可以在1.4中使用Crossfilter的新阵列尺寸功能,从而使dc能够以更可预测的方式运行。
您在小提琴中的设置(请在将来将所有代码放在您的问题中):
var data = [
{"name":"comp","arr":[[1493301233000, 123, 456], [1493301234000, 3, 4], [1493301235000, 5, 6]]},
{"name":"comp","arr":[[1493301236000, 11, 22]]},
{"name":"dogg","arr":[[1493301238000, 33, 55], [1493301239000, 66, 88]]}
];
//arr[x][0] = 1493301233000 comes from getTime(), i guess it should be on the x-axis
//arr[x][1] = 123 is not really important, would be nice if you see this value if you hover over a point
//arr[x][2] = 456 is the value, i guess it should be on the y-axis
设置尺寸和组。数组元素(数组本身)将是您的维度键。
var cf = crossfilter(data);
var arrDim = cf.dimension(function(d){ return d.arr;}, true);
var arrGroup = arrDim.group();
设置散点图。我对x和y域进行了硬编码,但我没有将您的值转换为日期。如果将它们转换为Date对象,dc.js的表现会更好。使用访问器函数(在底部)告诉散点图用于x(keyAccessor
),y(valueAccessor
)和悬停标签(title
)的值。
除非您设置brushOn(false)
,否则我们不会显示悬停标签,因此您目前无法刷新此图表进行过滤。
var scatter = dc.scatterPlot("#chart");
scatter
.width(300)
.height(300)
.x(d3.scale.linear().domain([1493301233000, 1493301239000]))
.y(d3.scale.linear().domain([0, 456]))
.yAxisLabel("y")
.xAxisLabel("x")
.brushOn(false)
.clipPadding(10)
.dimension(arrDim)
.excludedOpacity(0.5)
.group(arrGroup)
.valueAccessor(function(d) { return d.key[2]; })
.keyAccessor(function(d) { return d.key[0]; })
.title(function(d) { return d.key[1]; });
dc.renderAll();