У меня возникли проблемы с выяснением того, как получить несколько строк данных SQL в моей диаграмме Google.Как получить несколько строк данных в диаграмме с помощью Javascript
Я дошел до ввода данных на консоль (прокомментировал ниже), но как написать код диаграммы Google, чтобы он записывал новый массив для каждой строки в моей таблице?
Например, я хочу, чтобы следующий код, который будет повторяться для каждой строки в моих данных:
[''+bridge_id_grab, +milemarker_grab, 0, '1', +bridge_health_grab]
Полный код:
var sql_statement3 = "SELECT bridge_id, bridge_health, milemarker FROM TABLE_NAME &api_key=MY_API_KEY&callback=?"
$.getJSON('https://MY_USERNAME.cartodb.com/api/v2/sql/?q='+sql_statement3, function(data) {
//console.log(data.rows);
$.each(data.rows, function(key, val) {
for (i in data.rows) {
var bridge_id_grab = [];
var bridge_health_grab = [];
var milemarker_grab = [];
bridge_id_grab.push(data.rows[i].bridge_id);
bridge_health_grab.push(data.rows[i].bridge_health);
milemarker_grab.push(data.rows[i].milemarker);
//console.log(bridge_id_grab);
//console.log(bridge_health_grab);
//console.log(milemarker_grab);
function corridor_chart() {
var data = google.visualization.arrayToDataTable([
['Bridge', 'MileMarker', '', '', 'Health'],
[''+bridge_id_grab, +milemarker_grab, 0, '1', +bridge_health_grab],
[''+bridge_id_grab, +milemarker_grab, 0, '2', +bridge_health_grab]
]);
var options = {
"width": "100%",
"legacyContinuousAxisRemoved": true,
"chartArea": {
"top": "0%",
"left": "0%",
"right": "0%",
"width": "100%",
"height": "80%"
},
"height": 180,
"legend": "bottom",
title: '',
colors: ['#DB0000', '#FF0400', '#FF5500','#FF7C30', '#FFC431', '#FFF428', '#DCEA26', '#A7ED25', '#5DE207', '#00D300'],
"hAxis": {
"useFormatFromData": true,
"formatOptions": {},
"textStyle": {
"color": "none",
"fontSize": 0
},
"viewWindow": {},
"gridlines": {
"color": "none",
"count": "-1"
},
"titleTextStyle": {
"color": "none",
"fontSize": 0
}
},
vAxis: {
title: "",
"gridlines": {
"color": "none",
"count": "0"
},},
"bubble": {
"textStyle": {
"color": "blue",
"fontSize": 11
},
"opacity": "1",
"stroke": "#ffffff"
},
};
var chart = new google.visualization.BubbleChart(document.getElementById('corridor_chart'));
chart.draw(data, options);
}
google.setOnLoadCallback(corridor_chart);
}
});
});
Отредактированного код, основанный на ответ & комментариев darrylivan (он работает, хотя я все еще получаю сообщение об ошибке: «Неиспользуемая ошибка: не массив»):
var sql_statement3 = "SELECT bridge_id, bridge_health, milemarker FROM TABLE_NAME &api_key=MY_API_KEY&callback=?"
$.getJSON('https://MY_USERNAME.cartodb.com/api/v2/sql/?q='+sql_statement3, function(data) {
google.load('visualization', '1.0', { 'packages': ['corechart', 'controls', 'bar'] });
var chartData = [];
chartData.push( ['Bridge', 'MileMarker', '', '', 'Health'])
for (var i = 0; i < data.rows.length; i++)
{
var row = data.rows[i];
var dataRow = [
row.bridge_id.toString(),
row.milemarker,
0,
row.bridge_id.toString(),
row.bridge_health
];
chartData.push(dataRow);
console.log(dataRow);
}
/* then call your charting func, but pass in the data
instead of computing it in that func.
*/
corridor_chart(chartData);
function corridor_chart(chartData) {
var data = google.visualization.arrayToDataTable(chartData);
var options = {
"width": "100%",
"legacyContinuousAxisRemoved": true,
"chartArea": {
"top": "0%",
"left": "0%",
"right": "0%",
"width": "100%",
"height": "80%"
},
"height": 180,
title: '',
"legend": "bottom",
colors: ['#DB0000', '#FF0400', '#FF5500','#FF7C30', '#FFC431', '#FFF428', '#DCEA26', '#A7ED25', '#5DE207', '#00D300'],
"hAxis": {
"useFormatFromData": true,
"formatOptions": {},
"textStyle": {
"color": "none",
"fontSize": 0
},
"viewWindow": {},
"gridlines": {
"color": "none",
"count": "-1"
},
"titleTextStyle": {
"color": "none",
"fontSize": 0
}
},
vAxis: {
title: "",
"gridlines": {
"color": "none",
"count": "0"
},},
"bubble": {
"textStyle": {
"color": "blue",
"fontSize": 11
},
"opacity": "1",
"stroke": "#ffffff"
},
};
var chart = new google.visualization.BubbleChart(document.getElementById('corridor_chart'));
chart.draw(data, options);
}
google.setOnLoadCallback(corridor_chart);
});
Спасибо - это действительно полезно. Я пробовал это, и я получаю ошибки с графиком Google ... как получить переданные данные, привязанные к диаграмме? Я пробовал это: «var data = new google.visualization.DataTable();» См. Отредактированный вопрос выше для моего текущего кода ... все еще не работает для меня и не уверен, почему. – dchadney
Я получаю сообщение об ошибке - «Таблица не имеет столбцов» при попытке использовать «var data = new google.visualization.DataTable (data);» – dchadney
Возможно, я не понимаю, но из вашего исходного кода (скопированного из примера?), Похоже, вам нужно создать экземпляр диаграммы с помощью div: 'var chart = new google.visualization.BubbleChart (document.getElementById ('коридор_chart ')); ", а затем нарисуйте диаграмму с данными и параметрами:' chart.draw (данные, параметры); . Таким образом, вы не передаете данные до тех пор, пока не выполните метод draw(). Но, может быть, я не понимаю вопроса ... – darrylivan