在dc.js中有两个序数标度的bubbleChart

时间:2014-02-20 11:58:47

标签: d3.js crossfilter dc.js bubble-chart

我想使用带有两个序数轴的dc.js创建bubbleChart。当我尝试它时,我所有的气泡最终都在Y轴的顶部,而Y轴看起来并不是最有序的。

有没有办法正确地做到这一点?

以下是bubbleChart的配置:

.dimension(dims.currencyinstrument)
.group(groups.currencyinstrument.pnlSum)
.keyAccessor(function(d) {
        return d.key.split("~")[0]
    })
.valueAccessor(function(d) {
        return d.key.split("~")[1]
    })
.radiusValueAccessor(function(d) {
        return Math.abs(d.value)
    })
.x(d3.scale.ordinal().domain(groups.currencyinstrument.pnlSum.all().map(function(d) {return(d.key.split("~")[0])}).unshift("")))
.y(d3.scale.ordinal().domain(groups.currencyinstrument.pnlSum.all().map(function(d) {return(d.key.split("~")[1])}).unshift("")))
.r(d3.scale.linear().domain([0,groups.currencyinstrument.pnlSum.all().map(function(d) {return(Math.abs(d.value))}).sort(function(a,b){return(b-a)})[0]]))

编辑:这是fiddle。从GitHub加载数据需要一段时间(~1分钟),但这一切都是值得的!

1 个答案:

答案 0 :(得分:2)

简短的回答是coordinateGridMixin目前不支持序数Y标度。

通过删除elasticY并覆盖_prepareYAxis来改变它指定的错误范围,我能够得到它至少在这个小提琴中的显示:

dc.override(pnlPerCurrencyInstrumentTypebubbleChart, "_prepareYAxis", function(g) {
    this.__prepareYAxis(g);
    this.y().rangeBands([this.yAxisHeight(), 0])
});

http://jsfiddle.net/gordonwoodhull/xZFx4/10/

希望你能开始这个。我提交了这个bug来跟踪问题:

https://github.com/dc-js/dc.js/issues/539

编辑:更仔细地看一下,我认为rangePoints而不是rangeBands在这里更合适... guess coordinateGridMixin需要有一个自定义点,以便条形图和散点图可以指定不同的行为。