【问题标题】:dc.js bubble chart doesn't display bubbles. Grouping returns empty arraydc.js 气泡图不显示气泡。分组返回空数组
【发布时间】:2015-12-22 13:05:23
【问题描述】:

基本上,不会显示气泡,因为我用于图表的组是空的。

我的数据结构是什么样的:

[{
  "site": "Site",
  "service": "Long Term Care",
  "value": 67.52,
  "quarter": "Q1",
  "date": "2015-02-13T22:00:00.000Z",
  "groupId": 1
}, {
  "site": "Site",
  "service": "Long Term Care",
  "value": 67.19,
  "quarter": "Q2",
  "date": "2015-05-15T21:00:00.000Z",
  "groupId": 1
}, {
  "site": "Site",
  "service": "Long Term Care",
  "value": 66.87,
  "quarter": "Q3",
  "date": "2015-08-14T21:00:00.000Z",
  "groupId": 1
}, {
  "site": "Site",
  "service": "Long Term Care",
  "value": 66.57,
  "quarter": "Q4",
  "date": "2015-11-14T22:00:00.000Z",
  "groupId": 1
}, {
  "site": "Site",
  "service": "Assisted Living",
  "value": 75.36,
  "quarter": "Q1",
  "date": "2015-02-13T22:00:00.000Z",
  "groupId": 2
}, {
  "site": "Site",
  "service": "Assisted Living",
  "value": 75,
  "quarter": "Q2",
  "date": "2015-05-15T21:00:00.000Z",
  "groupId": 2
}, {
  "site": "Site",
  "service": "Assisted Living",
  "value": 74.65,
  "quarter": "Q3",
  "date": "2015-08-14T21:00:00.000Z",
  "groupId": 2
}, {
  "site": "Site",
  "service": "Assisted Living",
  "value": 74.31,
  "quarter": "Q4",
  "date": "2015-11-14T22:00:00.000Z",
  "groupId": 2
 }]

我想为我的数据源中的每一行显示一个气泡。我创建了一个基于季度的维度(我也尝试过使用日期字段但结果相同)和一个基于值字段的组(每个值都是一个唯一的浮点数)。但是在控制台中打印结果组时,它返回一个空数组。现在我不确定是否可以按照我的想法去做。

其余代码:

ndx = crossfilter(myData);
dateDimension = ndx.dimension(dc.pluck('quarter'));
print_filter(dateDimension);
valueGroup = dateDimension.group(dc.pluck('value'));
print_filter(valueGroup);
minValue = dateDimension.bottom(1)[0].value;
maxValue = dateDimension.top(1)[0].value;
testChart = dc.bubbleChart("#test-chart");
testChart.width(850).height(350).dimension(dateDimension).group(valueGroup)
  .renderLabel(false)
  .maxBubbleRelativeSize(0.3)
  .radiusValueAccessor(function (p) {
        return p.value.value;
      })
  .x(d3.scale.ordinal().domain(["Q1", "Q2", "Q3", "Q4"]))
  .xUnits(dc.units.ordinal)
  .y(d3.scale.linear().domain([0, maxValue + 10])).yAxisLabel("", 20);
dc.renderAll();

Here is the JsFiddle

这是我期望的图表的图片。

【问题讨论】:

    标签: dc.js crossfilter


    【解决方案1】:

    这里有很多问题,但主要是让您的组为您想要做的可视化正确定义。这是您的 JSFiddle 的更新,可以帮助您入门:https://jsfiddle.net/yewk7c0r/15/

    组的基本思想是在可视化所需的粒度级别定义维度,然后使用 reduceSum 定义组(如果您想进行平均或类似的操作,则使用自定义分组):

    ndx = crossfilter(myData);
    dateDimension = ndx.dimension(function(d) {
        return [d.quarter, d.service];
    });
    valueGroup = dateDimension.group().reduceSum(dc.pluck('value'));
    

    【讨论】:

    • 非常感谢。不过,有一个问题,我不太了解您赋予 y 轴的域值。你能解释一下吗?
    • 没问题。 d3.extent 根据访问器函数计算数组的最小值和最大值 - github.com/mbostock/d3/wiki/Arrays#d3_extent 另请注意,您不能直接从 Github 或 github.io 加载资源。这些资源 URL 需要指向 CDN 或 Rawgit 等服务。
    猜你喜欢
    • 2014-11-10
    • 1970-01-01
    • 1970-01-01
    • 2016-02-13
    • 2013-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多