Chart.js是一款UI统计图插件,我在使用它的bar chart和line chart和scatter chart的时候遇到了一些问题,Chart.js官网的doc/sample手册不详细,搜索结果不准确,没有论坛讨论(如图1所示),只好自己去bing上搜搜,国内的搜索很难搜索到,在国际版bing上搜索到了有用的解决方法,stackoverflow论坛上的讨论更详细
下面我将自己使用Chart.js遇到的问题、解决思路和解决方案分享给大家(其实是stack overflow讨论帖子的搬运工~)
坐标轴的名字 搜索关键词:chart.js\aixs\labelstackoverflow讨论帖:https://stackoverflow.com/questions/27910719/in-chart-js-set-chart-title-name-of-x-axis-and-y-axis解决code:在chart.js 2.0版本中,给坐标轴设置label的方法是options = {
scales: {
yAxes: [{
scaleLabel: {
display: true,
labelString: 'probability'
}
}]
}
}
思考:如果搜索关键词换成chart.js/xlabel/title等,找不到解决方法
图例的位置
搜索关键词:chart.js\legend\positionstackoverflow讨论帖:https://stackoverflow.com/questions/59213088/chartjs-pie-legend-position#:~:text=ChartJs%20pie%20have%204%20default%20positions%20form%20legends%3A,a%20little%20sample%20of%20default%20legend%20style%3A%20https%3A%2F%2Fcodepen.io%2Feduardodos%2Fpen%2FxxbwGpN解决code:设置option选项中的legend属性
options: {
legend: {
position: 'bottom'
}
}
思考:chart.js的图例属性是label,受到它的误导,我一直在搜索引擎中搜索chart.js label position,搜索出的结果完全不能用,换成legend之后,能搜索到图例位置属性官网doc手册:https://www.chartjs.org/docs/latest/configuration/legend.html多条线画在同一幅图中 搜索关键词:Chart.js/multi line/multi labelsstack overflow讨论帖:https://stackoverflow.com/questions/49489670/chart-js-displaying-multiple-line-charts-using-multiple-labels,帖子里描述了一种应用情形:
Char1的x和y数据分别是:
1 -> 2
2 -> 4
3 -> 8
4 -> 16
Chart2的x和y数据分别是:
1 -> 3
3 -> 4
4 -> 6
6 -> 9
两个Chart的x值不同,采用line chart只能设置一组x值,也就是chart中的label值
解决code:使用scatter类型图并将showLine设置成true,而不是使用line类型的图设置labelvar ctx = document.getElementById("myChart");
var myChart = new Chart(ctx, {
type: 'scatter',
data: {
datasets: [
{
label: 'Chart 1',
data: [{x: 1, y: 2}, {x: 2, y: 4}, {x: 3, y: 8},{x: 4, y: 16}],
showLine: true,
fill: false,
borderColor: 'rgba(0, 200, 0, 1)'
},
{
label: 'Chart 2',
data: [{x: 1, y: 3}, {x: 3, y: 4}, {x: 4, y: 6}, {x: 6, y: 9}],
showLine: true,
fill: false,
borderColor: 'rgba(200, 0, 0, 1)'
}
]
},
options: {
tooltips: {
mode: 'index',
intersect: false,
},
hover: {
mode: 'nearest',
intersect: true
},
scales: {
yAxes: [{
ticks: {
beginAtZero:true
}
}]
},
}
});
思考:一直在line chart中兜圈子,不得不说有时候要考虑考虑其它的图,官网上这样描述scatter chart和line chartscatter chart支持line chart的全部属性
获取JSON数据 参考链接:https://blog.csdn.net/u013201439/article/details/72794408
或者http://microbuilder.io/blog/2016/01/10/plotting-json-data-with-chart-js.html#loading-json-data-with-jquery解决方法:chart.js不同于ApexChart,ApexChart自带了UpdateSeries函数,函数中调用 . g e t J S O N ( ) 方 法 , 将 J S O N 数 据 传 入 到 A p e x C h a r t , c h a r t . j s 没 有 自 带 的 函 数 属 性 , 只 能 用 .getJSON()方法,将JSON数据传入到ApexChart,chart.js没有自带的函数属性,只能用 .getJSON()方法,将JSON数据传入到ApexChart,chart.js没有自带的函数属性,只能用.ajax()方法,经过它的启发,也能用$.getJSON()方法,方法中传入数据并初始化chart思考:获取JSON数据的功能在chart.js官网上没有讨论和说明,显得不够友好搜索关键词:$.getJSON()/chart.jsstack overflow讨论贴:https://stackoverflow.com/questions/55278747/mapping-data-from-getjson-response-in-chart-js解决code:chart.js中的创建图函数和 . g e t J S O N ( ) 是 分 开 的 , l a b e l s 和 d a t a 变 量 在 .getJSON()是分开的,labels和data变量在 .getJSON()是分开的,labels和data变量在.getJSON()外部没有定义,自然不能成功创建chart,那么在done()里面获取JSON数据的同时,将获取的JSON数据转换成chart.js能够识别的labels和data,调用创建图的函数
$.getJSON('file.json').done( function (results) {
var labels = [];
var data = [];
var labels = results.map(function (item) {
return item.updatedLabels
});
var data = results.map(function (item) {
return item.updatedData;
});
// Create chart
createChart(labels, data);
});
function createChart(labels, data) {
var myChart = new Chart(ctx, {
type: 'line',
data: {
labels: labels,
datasets: [{
label: 'Example',
data: data,
borderColor: 'rgba(75, 192, 192, 1)',
backgroundColor: 'rgba(75, 192, 192, 0.2)',
}]
},
});
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)