d3.js - dc.js 中带有 JSON 对象的折线图

标签 d3.js dc.js crossfilter

我是 dc.js 的新手,我想用对象创建一个简单的折线图。
对象(/signalData.json):

"1": 10, 
"2": 20,
"3": 30, 
"4": 40,
"5": 50, 
"6": 60
键应该是 x 坐标,值应该是 y 坐标
我试过这样的事情,但它不起作用:

var data = {
  "1": 10,
  "2": 20,
  "3": 30,
  "4": 40,
  "5": 50,
  "6": 60
};

var dataModel = [{
  "keys": Object.keys(data).map(function(d) {
    return +d;
  }),
  "values": Object.values(data)
}, ]

signalCF = crossfilter(dataModel)

signalDim = signalCF.dimension(function(d) {
  return d.keys
}, true)
signalGroup = signalDim.group().reduceSum(function(d) {
  return d.values
});


var linechart = dc.lineChart("#linechart")
  .width(700)
  .height(300)
  .x(d3.scale.linear().domain([0, 6]))
  .renderArea(true)
  .brushOn(false)
  .renderDataPoints(true)
  .clipPadding(10)
  .yAxisLabel("This is the Y Axis!")
  .dimension(signalDim)
  .group(signalGroup);

linechart.render();
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.5.17/d3.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/crossfilter2/1.4.0-alpha.6/crossfilter.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/dc/2.1.1/dc.js"></script>
<div id="linechart"></div>

最佳答案

您对数据结构做出了错误的假设。您需要一个每个刻度有一个值的数组,而不是一个所有值都紧随其后的数组:

[{ keys: [], values: [] }]
变成
[{ key: number, value: number }, { key: number, value: number }, ...]

var data = {
  "1": 10,
  "2": 20,
  "3": 30,
  "4": 40,
  "5": 50,
  "6": 60
};

var dataModel = Object.keys(data).map(function(d) {
  return {
    key: +d,
    value: data[d]
  };
})

signalCF = crossfilter(dataModel)

signalDim = signalCF.dimension(dc.pluck("key"))
signalGroup = signalDim.group().reduceSum(function(d) {
  return d.value;
});


var linechart = dc.lineChart("#linechart")
  .width(700)
  .height(300)
  .x(d3.scale.linear().domain([0, 6]))
  .renderArea(true)
  .brushOn(false)
  .renderDataPoints(true)
  .clipPadding(10)
  .yAxisLabel("This is the Y Axis!")
  .dimension(signalDim)
  .group(signalGroup);

linechart.render();
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.5.17/d3.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/crossfilter2/1.4.0-alpha.6/crossfilter.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/dc/2.1.1/dc.js"></script>
<div id="linechart"></div>

关于d3.js - dc.js 中带有 JSON 对象的折线图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64558617/

相关文章:

javascript - D3JS 花瓣/花图。如何适应使用数据

javascript - 如何在同一页面中使用同一个 javascript 库的两个版本而不泄漏函数?

javascript - D3 和​​ jQuery 有什么区别?

d3.js - 禁用画笔调整大小(DC.js、D3.js)

javascript - ReferenceError- crossfilter 未定义

javascript - DC.JS 散点图不过滤

javascript - d3.js 按索引在特定点向折线图添加垂直线

javascript - 为什么我的 dc-js 轴显示得这么粗,而刷子过滤器显示为不透明的黑色?

javascript - 如何在 dc.js 中为多标签数据制作行图

javascript - 服务器端 Crossfilter : replicate filterfunction. 如何从函数闭包访问变量