Javascript 如何对GoogleCharts数据表进行排序,并将排序扩展到其他列?
我正在使用谷歌图表组合图创建一个帕累托图表。我正在浏览本网站上的说明: 我已经找了几天了,在这里没有找到任何解决问题的方法 这是我的代码部分(收到的var行如下:Javascript 如何对GoogleCharts数据表进行排序,并将排序扩展到其他列?,javascript,sorting,charts,google-visualization,Javascript,Sorting,Charts,Google Visualization,我正在使用谷歌图表组合图创建一个帕累托图表。我正在浏览本网站上的说明: 我已经找了几天了,在这里没有找到任何解决问题的方法 这是我的代码部分(收到的var行如下:”{“startingIssue”:21,“manualIssue”:8,“powerIssue”:7,“trimmerHeadIssue”:15,“qualityIssue”:3,“customerSupportIssue”:1,“noiseIssue”:1,“vibrationIssue”:1,“人机工程学问题”:3}) 在将数据
”{“startingIssue”:21,“manualIssue”:8,“powerIssue”:7,“trimmerHeadIssue”:15,“qualityIssue”:3,“customerSupportIssue”:1,“noiseIssue”:1,“vibrationIssue”:1,“人机工程学问题”:3}
)
在将数据添加到DataTable之前,我尝试对数据进行排序,以便直接利用javascript中的排序/数组,但无论我如何进行排序,图形总是不正确,如下所示:
蓝色条按应有的顺序降序排列,但红线应与从左向右移动的总累积百分比相对应
我觉得这是一个非常相关的问题,任何人使用谷歌图表,并希望正确排序他们的数据,并扩大到其他列
我也尝试过不同的计算累计百分比的方法,但是没有一种方法能与我目前使用的方法相比更接近。在计算累计百分比之前,必须对数据进行排序 有几种方法可以实现,
但是坚持使用谷歌的工具,
独立加载每个柱 1) 加载频率列
2) 排序频率列描述
3) 用于获取总计
4) 负载百分比列
google.charts.load('current'{
回调:函数(){
var jsonData={“启动问题”:21,“手动问题”:8,“电源问题”:7,“微调头问题”:15,“质量问题”:3,“客户支持问题”:1,“噪音问题”:1,“振动问题”:1,“人体工程学问题”:3};
var data=new google.visualization.DataTable();
data.addColumn('string','Category');
data.addColumn('number','Frequency');
data.addColumn('number','Pctg');
//1)荷载频率列
for(jsonData中的var键){
data.addRows([
[(键),jsonData[key],null]
]);
}
//2)排序频率列
data.sort({
专栏:1,
描述:是的
});
//3)获取总数
var dataSum=google.visualization.data.group(
数据,
[{列:0,类型:'string',修饰符:函数(){return';}}}],
[{列:1,键入:'number',聚合:google.visualization.data.sum}]
);
//4)荷载百分比栏
var accum=0;
对于(var i=0;i
这个问题运气好吗?
var rows = xmlhttp.responseText;
var data = new google.visualization.DataTable();
data.addColumn('string', 'Category');
data.addColumn('number', 'Frequency');
data.addColumn('number', 'Pctg');
alert(rows);
var jsonData = JSON.parse(rows);
//alert(jsonData['start']);
var sum = 0;
for (var key in jsonData) {
sum += jsonData[key];
}
var total = sum;
var accum = 0;
for (var key in jsonData) {
data.addRows([
[(key), jsonData[key], accum + (jsonData[key] / sum) * 100]
]);
accum = accum + (jsonData[key] / sum) * 100;
}
data.sort({
column: 1,
desc: true
});
//data.sort({column: 2, desc: true});
// Calculate the accumulating percentages
// and add them into a new column in each row
// Add the title row at the beginning of dataSet
// ('unshift' is not supported in IE8 and earlier)
//data.unshift( dataTitle );
var options = {
title: 'Pareto chart',
legend: {
position: 'none'
}, // no legend
// Create two vertical axes taking its titles from the first row
vAxes: [{
title: dataSet1[0][1],
minValue: 0
}, {
title: dataSet1[0][2],
minValue: 0,
maxValue: 100
}],
hAxis: {
title: dataSet1[0][0]
},
backgroundColor: {
strokeWidth: 2
}, // to get a nice box
seriesType: "bars", // the standard chart type
// the second data column should be of type 'line' and should be associated with the second vertical axis
series: {
1: {
type: "line",
targetAxisIndex: 1
}
},
};
var chart = new google.visualization.ComboChart(
document.getElementById('chart_div'));
chart.draw(data, options);