【发布时间】:2014-11-10 17:24:40
【问题描述】:
我正在尝试使用 crossfilter 和 dc.js 制作气泡图。但我无法让我的分数出现在我的图表上。我在这里建立了一个 JSFiddle:
var data = [
{date: "12/27/2012", label: "a1", x: 2, y: 190, bubble: 5},
{date: "12/28/2012", label: "a2", x: 2, y: 10, bubble: 5},
{date: "12/29/2012", label: "a3", x: 95, y: 300, bubble: 10}
];
var ndx = crossfilter(data);
var parseDate = d3.time.format("%m/%d/%Y").parse;
data.forEach(function(d) {
d.date = parseDate(d.date);
});
var dateDim = ndx.dimension(function(d) {return d.date;});
var xDim = ndx.dimension(function(d) {return d.x;});
var bubbleChart = dc.bubbleChart("#bubble-chart");
bubbleChart
.dimension(dateDim)
.group(xDim)
.x(d3.scale.linear().domain([0, 100]))
.y(d3.scale.linear().domain([0, 100]))
.width(400)
.height(400)
.yAxisPadding(50)
.xAxisPadding(50)
.xAxisLabel('X') // (optional) render an axis label below the x axis
.yAxisLabel('Y') // (optional) render a vertical axis lable left of the y axis
.label(function (p) {
return p.label;
})
.renderLabel(true)
.title(function (p) {
return [
"x: " + p.x,
"y: " + p.y,
"Bubble: " + p.bubble,
]
.join("\n");
})
.renderTitle(true)
.renderHorizontalGridLines(true) // (optional) render horizontal grid lines, :default=false
.renderVerticalGridLines(true)
.maxBubbleRelativeSize(0.3)
.keyAccessor(function (p) {
return p.y;
})
.valueAccessor(function (p) {
return p.x;
})
.radiusValueAccessor(function (p) {
return p.bubble;
})
;
可以通过底部的数据表查看数据,因此我知道正在查看数据。在这一点上我最好的猜测是我没有正确实施我的组或维度,但我似乎没有尝试对我有用。
谁能看到我在这里做错了什么?我正在寻找要显示为 data.x、data.y 且气泡大小为 data.bubble 的点。
编辑:更新了问题以包含更多设置 JS。 (所有代码都在我的小提琴上)
【问题讨论】:
-
我很抱歉,但只是要求其他人调试您的代码并不是一个很好的 SO 问题。特别是,您需要 1. 查看调试控制台是否有任何错误 2. github.com/dc-js/dc.js/wiki/… 3. 浏览器中的调试器是您的朋友。
-
我不是想让你调试我的代码。正如我所说,我想我明白我的问题出在哪里(组/维度)。这实际上不是我的“代码”,而是试图重现该问题的小提琴。我已经大大简化了代码以尝试使其更容易。没有控制台错误。我认为很明显我在分组方面遇到了问题,因为这是我理解最少的代码部分。
-
哇,您似乎发现了一个非常奇怪的 dc.js 角落案例。应该不可能将维度作为一个组传递。只是碰巧他们都有一个
.top函数,所以这就是它没有产生任何错误的原因。呃。 -
戈登,是的,所以这是在多次尝试使其正常工作后出现的,并且可能作为复制粘贴错误引入我的代码中。我不怀疑很多人会这样做,但也许可以设置一个检查来强制检查是否正在传递一个组?也许在基组类上有一个 isGroup(){return true} 方法或其他东西(这对我来说似乎有点骇人听闻,这真的太糟糕了 JS 不支持类型提示。
-
嗯,这很有趣,因为很多人实际上用看起来像正确对象的其他对象替换(例如,参见“假组”模式,以及根本不使用交叉过滤器的人)。如果传入的对象与预期的界面不匹配,最好的方法可能是发出控制台警告,人们可以禁用该界面。我一直在考虑将内部接口形式化,所以我可以做到。
标签: javascript d3.js dc.js crossfilter bubble-chart