Javascript 如何对GoogleCharts数据表进行排序,并将排序扩展到其他列?

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}) 在将数据

我正在使用谷歌图表组合图创建一个帕累托图表。我正在浏览本网站上的说明:

我已经找了几天了,在这里没有找到任何解决问题的方法

这是我的代码部分(收到的var行如下:
”{“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);