Javascript 在google.visualization.data.group中包含字符串列
我有一张桌子基本上是这样的:Javascript 在google.visualization.data.group中包含字符串列,javascript,charts,google-visualization,Javascript,Charts,Google Visualization,我有一张桌子基本上是这样的: {"cols":[ {"label":"Date","type":"date"}, {"label":"Person","type":"string"}, {"label":"Amount","type":"number"}], "rows":[ {"c":[{"v":"Date(2018, 1, 01)"},{"v":"John"},{"v":1.28}]}, {"c":[{"v":"Date(2018, 1, 01)"},
{"cols":[
{"label":"Date","type":"date"},
{"label":"Person","type":"string"},
{"label":"Amount","type":"number"}],
"rows":[
{"c":[{"v":"Date(2018, 1, 01)"},{"v":"John"},{"v":1.28}]},
{"c":[{"v":"Date(2018, 1, 01)"},{"v":"Mary"},{"v":6}]},
{"c":[{"v":"Date(2018, 1, 01)"},{"v":"John"},{"v":9.31}],
{"c":[{"v":"Date(2018, 1, 01)"},{"v":"Richard"},{"v":3.5}]},
{"c":[{"v":"Date(2018, 2, 01)"},{"v":"Mary"},{"v":48.99}]},
{"c":[{"v":"Date(2018, 2, 01)"},{"v":"Richard"},{"v":29.95}]},
{"c":[{"v":"Date(2018, 2, 01)"},{"v":"John"},{"v":18}]},
etc...
]}
我想将数据显示为堆叠面积图。日期将在x轴上,金额将在y轴上,类别将是人员
以下是我对数据进行分组的尝试:
var data = new google.visualization.data.group(
data,
[0],
[{'column': 1, 'aggregation': ?, 'type': 'string'}],
[{'column': 2, 'aggregation': google.visualization.data.sum, 'type': 'number'}]
);
我的问题是,我不知道列1的“聚合”应该放什么。我不能使用'sum',因为它是一个字符串,而且,它会抛出错误“给定轴上的所有系列必须具有相同的数据类型”
我试过这个:
var data = new google.visualization.data.group(
data,
[0,1],
[{'column': 2, 'aggregation': google.visualization.data.sum, 'type': 'number'}]
);
但这也会引发错误“给定轴上的所有系列必须具有相同的数据类型”
如果我省略了第1列altogther,那么图表可以工作,但是没有堆叠。所有人的数据只是集中在一起
var data = new google.visualization.data.group(
data,
[0],
[{'column': 2, 'aggregation': google.visualization.data.sum, 'type': 'number'}]
);
为了让每个人都有独立的堆栈,
每个人都需要自己的数据表列或序列 要转换给定的数据表,
按日期和人员划分的第一组。
然后为每个人创建一个单独列的数据视图,
最后,按日期对所有列进行分组和求和 请参阅以下工作片段,
该表显示了所需的布局
google.charts.load('current'{
包:['corechart','table']
}).然后(函数(){
//创建数据表
var data=new google.visualization.DataTable({
“科尔斯”:[
{“标签”:“日期”,“类型”:“日期”},
{“label”:“Person”,“type”:“string”},
{“标签”:“金额”,“类型”:“编号”}
],
“行”:[
{“c”:[{“v”:“日期(2018年1月1日)”},{“v”:“约翰”},{“v”:1.28}]},
{“c”:[{“v”:“日期(2018年1月1日)”},{“v”:“其他”},{“v”:6}]},
{“c”:[{“v”:“日期(2018年1月1日)”},{“v”:“约翰”},{“v”:9.31}]},
{“c”:[{“v”:“日期(2018年1月1日)”},{“v”:“儿童”},{“v”:3.5}]},
{“c”:[{“v”:“日期(2018年2月1日)”},{“v”:“玛丽”},{“v”:48.99}]},
{“c”:[{“v”:“日期(2018年2月1日)”},{“v”:“理查德”},{“v”:29.95}]},
{“c”:[{“v”:“日期(2018年2月1日)”},{“v”:“约翰”},{“v”:18}]},
{“c”:[{“v”:“日期(2018年2月1日)”},{“v”:“其他”},{“v”:6}]},
{“c”:[{“v”:“日期(2018年3月1日)”},{“v”:“儿童”},{“v”:3.5}]},
{“c”:[{“v”:“日期(2018年3月1日)”},{“v”:“玛丽”},{“v”:48.99}]},
{“c”:[{“v”:“日期(2018年3月1日)”},{“v”:“Richard”},{“v”:29.95}]},
{“c”:[{“v”:“日期(2018年3月1日)”},{“v”:“约翰”},{“v”:18}]}
]
});
//组数据表
var groupData=google.visualization.data.group(
数据,
[0, 1],
[{
专栏:2,
聚合:google.visualization.data.sum,
键入:“数字”
}]
);
//创建数据视图
var view=newgoogle.visualization.DataView(groupData);
//和列数组
var aggColumns=[];
//将日期用作第一个视图列
var viewColumns=[0];
//为每个人生成视图和agg列(&A)
groupData.getDistinctValues(1).forEach(函数(性别,索引){
//为每个人添加视图列
viewColumns.push({
计算:函数(dt,行){
如果(dt.getValue(第1行)==性别){
返回dt.getValue(第2行);
}
返回null;
},
标签:性别,
键入:“数字”
});
//为每个人添加“总和”列
推({
聚合:google.visualization.data.sum,
列:索引+1,
标签:性别,
键入:“数字”
});
});
//设置视图列
view.setColumns(viewColumns);
//按日期汇总视图
var aggData=google.visualization.data.group(
看法
[0],
聚合柱
);
//绘制图表
var chart=new google.visualization.AreaChart(document.getElementById('chart_div'));
图表、绘图(数据、{
伊斯塔克德:是的
});
//画图台
var table=新的google.visualization.table(document.getElementById('table_div');
表.绘图(数据);
});代码>
.dashboard{
文本对齐:居中;
}
.仪表板部{
边缘底部:12px;
}