d3.js - dc.js 中带有 JSON 对象的折线图
问题描述
我是 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>
推荐阅读
- python - selenium.common.exceptions.WebDriverException:消息:“Mozilla Firefox”可执行文件在使用 GeckoDriver 时可能具有错误的权限
- php - 如何使用 MySQL 函数按属性删除 JSON 数组中的对象?
- ios - 使用 DJI UXSDKDemo (iOS) 记录数据的最佳方法
- php - 如何创建一个 cron 作业
- php - PHP 两个不同的按钮发送相同的数据
- html - VBA填写不是文本区域的在线表格
- datetime - 特定日期时间的 forfiles
- lua - 如何在 Lua 中设置定义的十进制值?
- django - 如何实时检查 Django 表单中的输入部分
- angular - Angular 5 @input() 对象属性绑定错误