Javascript 角度谷歌图表-构建和排序数据表
我正在使用绘制Angularjs应用程序中的线/面积图,该图来自通过sparql查询检索的rdf数据,并且在应用程序中以类似json的格式提供 在主控制器中,我声明了如下绘图函数:Javascript 角度谷歌图表-构建和排序数据表,javascript,angularjs,charts,google-visualization,Javascript,Angularjs,Charts,Google Visualization,我正在使用绘制Angularjs应用程序中的线/面积图,该图来自通过sparql查询检索的rdf数据,并且在应用程序中以类似json的格式提供 在主控制器中,我声明了如下绘图函数: $scope.createChart = function () { var json1 = $scope.entities // here I have my data var rows = []
$scope.createChart = function () {
var json1 = $scope.entities // here I have my data
var rows = []
// populate rows with data:
for (var key in json1) {
// json1 has extra data I don't need
if (json1[key]['sdmx-dimension:refTime'] && json1[key]['dpc:deads']) {
var date = new Date(json1[key]['sdmx-dimension:refTime']);
var deads = json1[key]['dpc:deads']
rows.push({ c: [ { v:date }, { v:deads } ] })
}
}
$scope.myChartObject = {
"type": "AreaChart",
"data": {
"cols": [
{
"id": "date",
"label": "Date",
"type": "date"
},
{
"id": "deaths",
"label": "Deaths",
"type": "number"
}
]
},
"options": {
"title": "Deaths trend",
"height": 400,
"width": 600,
"vAxis": {
"title": "Deaths",
},
"hAxis": {
"title": "Date"
}
}
}
// attach the rows to the chart object
$scope.myChartObject.data.rows = rows
// template containing the chart
$scope.callTemplate('drawChart', '#right', true)
}
// wait for sparql query to retrieve data before create chart
// otherwise an empty chart will be drawn!
window.setTimeout( function(){ $scope.createChart() }, 3000);
使用此解决方案,我能够用数据绘制图表,但问题是:日期排序不正确,因此趋势线在图表上呈之字形:
我尝试对行数组使用排序函数:
rows.sort([{column:0}])
但最终的订单比最初的订单更糟糕
我不能像这样对图表对象使用排序:
$scope.myChartObject.data.sort([{column:0}])
因为这不是一个数组
日期的格式如下:'yyyy-mm-dd'
(例如'2020-02-24'
)
即使我在新的日期分配之前将其修改为“yyyy,mm,dd”,似乎也没有任何改进
这里console.log(myCharObject)
:
这里,如果我在html模板中打印{{myCharObject}}
变量:
如何对这些日期进行排序?
我是否应该使用其他方法来定义所描述的图表?要对对象数组进行排序,需要提供自定义排序功能 在添加到图表数据之前,请尝试使用以下命令对行进行排序
// sort
rows.sort(function (rowA, rowB) {
return rowA.c[0].v.getTime() - rowB.c[0].v.getTime();
});
e、 g
// populate rows with data:
for (var key in json1) {
// json1 has extra data I don't need
if (json1[key]['sdmx-dimension:refTime'] && json1[key]['dpc:deads']) {
var date = new Date(json1[key]['sdmx-dimension:refTime']);
var deads = json1[key]['dpc:deads']
rows.push({ c: [ { v:date }, { v:deads } ] })
}
}
// sort
rows.sort(function (rowA, rowB) {
return rowA.c[0].v.getTime() - rowB.c[0].v.getTime();
});
有关示例,请参见以下工作代码段
//测试数据
var行=[];
push({c:[{v:newdate(2020,2,1)},{v:7}]});
push({c:[{v:newdate(2020,1,1)},{v:7}]});
push({c:[{v:newdate(2020,0,1)},{v:7}]});
//排序前
console.log(“之前的第1行”,第[0].c[0].v行);
//分类
rows.sort(函数(rowA,rowB){
返回rowA.c[0].v.getTime()-rowB.c[0].v.getTime();
});
//排序后
console.log(“之后的第1行”,第[0].c[0].v行)代码>好极了!我尝试使用自定义排序函数,但没有使用最后的.v.getTime()
部分进行比较