dimple.js 聚合非数值

dimple.js aggregating non-numerical values

假设我有一个只包含一列的 csv Name,这是前几个值:

Name
A
B
B
C
C
C
D

现在我想使用 dimple.js 创建一个条形图,显示 Name 的分布(即每个不同 Name 的计数),但我找不到在没有每个名字的实际计数的情况下在酒窝中做到这一点的方法。我查阅了 chart.addMeasureAxis( https://github.com/PMSI-AlignAlytics/dimple/wiki/dimple.chart#addMeasureAxis) 并发现对于度量参数:

measure(必填):这应该是数据中的字段名称。如果该字段包含数值,它们将被聚合,如果它包含任何非数值,将使用值的不同计数。

所以基本上就是说每个类别出现了多少次并不重要,dimple 只是将它们中的每一个都当作它们出现过一次来对待??

我尝试了以下 chart.addMeasureAxis('y', 'Name'),结果是一个条形图,每个条形的值为 1(即每个名称只出现一次)。

有没有办法在不改变数据集的情况下实现这个?

您的数据中确实需要其他内容来区分行:

例如

Type    Name
X       A
Y       A
Z       A
X       B
Y       B
A       C

你可以这样做:

chart.addCategoryAxis("x", "Name");
chart.addMeasureAxis("y", "Type");

或添加计数:

Name    Count
A       1
A       1
A       1
B       1
B       1
C       1

那就是

chart.addCategoryAxis("x", "Name");
chart.addMeasureAxis("y", "Count");

但是没有办法只用名字来做到这一点。

希望这会有所帮助。首先使用 d3.nest() 获取数据集的唯一值。然后将每个不同值的计数添加到新创建的对象中。

var countData = d3.nest()
    .key(function (d) {
        return d["name];
    })
    .entries(yourDate);

countData.forEach(function (c) {
    c.count = c.values.length;
});

在此之后从新 "countData Object"

创建了酒窝图
var myChart = new dimple.chart(svg, countData); 

然后对于'x'和'y'轴,

myChart.addCategoryAxis("x", "key");
myChart.addMeasureAxis("y", "count");

请查看 d3.nest() 以了解 "countData" 对象。