Javascript 如何创建y轴上具有唯一计数且x轴上具有类别的基本条形图?

Javascript 如何创建y轴上具有唯一计数且x轴上具有类别的基本条形图?,javascript,d3.js,graph,dc.js,crossfilter,Javascript,D3.js,Graph,Dc.js,Crossfilter,我想创建一个基本条形图,在x轴上显示“type”,在y轴上显示“unique count”。我似乎找不到x轴上有类型的示例(甚至在教程中也找不到) 我有以下代码: <div id='dc-bar-chart'></div> 这是我的密码 ndx = new crossfilter(data) var XDimension = ndx.dimension(function (d) {return d.type;}); var YDimension = XDimensio

我想创建一个基本条形图,在x轴上显示“type”,在y轴上显示“unique count”。我似乎找不到x轴上有类型的示例(甚至在教程中也找不到)

我有以下代码:

<div id='dc-bar-chart'></div>
这是我的密码

ndx = new crossfilter(data)

var XDimension = ndx.dimension(function (d) {return d.type;});
var YDimension = XDimension.group().reduceSum(function (d) {return d.total;});

dc.barChart("#dc-bar-chart")
    .width(480).height(150)
    .dimension(XDimension)
    .group(YDimension)
    .centerBar(true)
    .gap(56) 
});
dc.renderAll();

这里有一些问题

首先,在要聚合的数据中有个N,因此需要将YDimension更改为

var YDimension = XDimension.group().reduceSum(function (d) {return isNaN(d.total) ? 0 : d.total;});
使交叉滤波器正确求和

然而,实际的答案是关于你的x标度。你现在只是不包括一个,但听起来你所说的是一个。序数刻度是您通常认为用于条形图的刻度;它们是一种具有离散域的尺度。在这种情况下,您可以尝试添加顺序刻度,如下所示:

.x(d3.scale.ordinal().domain(["visa", "cash", "tab"]))
因此,它使用了序数刻度。因为您使用的是dc.js,所以还需要指定

.xUnits(dc.units.ordinal)
所以它知道使用序数标记

总的来说,我用

dc.barChart("#dc-bar-chart")
    .width(480).height(150)
    .x(d3.scale.ordinal().domain(["visa", "cash", "tab"]))
    .xUnits(dc.units.ordinal)
    .dimension(XDimension)
    .group(YDimension)
    .centerBar(false);
在我这方面效果很好。根据您的dc.js版本,您可以省略域,让dc.js自动计算出来。在这种情况下,你可以使用

.x(d3.scale.ordinal())
你有一个迷路的
})在第二个代码块中。是否有更多使用的代码丢失?
.x(d3.scale.ordinal())