我正在尝试导入一个csv文件,并将其用作ChartJs中散点图的数据源。当我打印dataPoints时,我得到正确值的对象数组,因此我知道ajax请求正在正确提取。但是我似乎无法将这些值作为x和y值传递到我的数据集中。
不幸的是,我能够使用canvasJS成功提取数据并将其插入到x和y值中,但是该框架不是免费的,因此我尝试切换到chart.js。香港专业教育学院试图插入数据:[{dataPoints:pullData()}]或数据:pullData()或数据:[dataPoints]和许多其他组合,但似乎都不起作用。我熟悉swift和Java编码,但是对Javascript来说特别陌生。任何帮助将不胜感激!
const CHART = document.getElementById("scatterChart");
console.log(CHART);
var scatterChart = new Chart(CHART, {
type: 'scatter',
data: {
datasets: [{
label: 'Scatter Dataset',
data: [{
x: -10,
y: 0
}, {
x: 0,
y: 10
}, {
x: 10,
y: 5
}],
borderColor: 'black',
borderWidth: 1,
pointBackgroundColor: '#00bcd6',
pointRadius: 5,
pointHoverRadius: 5,
fill: false,
tension: 0.5,
showLine: true
}]
},
options: {
scales: {
xAxes: [{
type: 'linear',
position: 'bottom'
}],
yAxes: [{
type: 'linear',
position: 'left'
}]
}
}
});
window.onload = function(){
$.ajax({
type: "GET",
url: "mockData.csv",
dataType: "text",
success: function (result){
var data = $.csv.toArrays(result);
var dataPoints = [];
for (var i = 0; i < data.length; i++)
dataPoints.push({
x: data[i][0],
y: data[i][1]
});
console.log(dataPoints)
return dataPoints
}
})
};
我的目标是从csv绘制点(只有5行和2列基本数字),但没有点出现。就像我手动将值卡入x和y一样,一切都很好。
答案 0 :(得分:1)
您需要将图表的创建移至ajax调用的成功函数内部,或者将dataPoints传递给其他创建图表的函数。
答案 1 :(得分:0)
在@terpinmd建议之后,我能够解决该问题。下面是代码解决方案:
function getDataPointsFromCSV(csv) {
var dataPoints = csvLines = points = [];
for (var i = 0; i < csv.length; i++)
dataPoints.push({
x: csv[i][0],
y: csv[i][1]
});
console.log(dataPoints)
return dataPoints
}
window.onload = function(){
var dataPoints = [];
$.ajax({
type: "GET",
url: "mockData.csv",
dataType: "text",
success: function (result){
var data = $.csv.toArrays(result);
const CHART = document.getElementById("scatterChart");
console.log(CHART);
var scatterChart = new Chart(CHART, {
type: 'scatter',
data: {
datasets: [{
label: 'Scatter Dataset',
data: getDataPointsFromCSV(data),
borderColor: 'black',
borderWidth: 1,
pointBackgroundColor: '#00bcd6',
pointRadius: 5,
pointHoverRadius: 5,
fill: false,
tension: 0.5,
showLine: true
}]
},
options: {
scales: {
xAxes: [{
type: 'linear',
position: 'bottom'
}],
yAxes: [{
type: 'linear',
position: 'left'
}]
}
}
});
}
})
};