Charts.js - 值区间的条形图不同颜色不起作用
Charts.js - Bar chart different colors for value intervals not working
我正在从 JSON 中读取一些数据,并且我正在使用 Charts.js 绘制值与时间的关系图。但是,我无法解决两件事:
- 我无法读取最后的 20 个元素
- 我无法根据值使条形图改变颜色
关于 1,我已经设法使用 return key<20;
读取了前 20 个元素,但我不知道如何读取最后一个元素。我已经尝试使用 return [key.length-1,key.length-20]
,但实际上并没有用。
关于2,我试过一些其他人遇到的不同方法和Fiddle的一些代码,但它不起作用。控制台显示 chartColors
中的元素。谁能帮我解决这两个问题?
下面的代码工作得很好,给出这个:
我想要这样的东西:
<!DOCTYPE HTML>
<html>
<head>
</head>
<body>
<canvas id="PM25">test</canvas>
</body>
<script type="text/javascript" src="https://canvasjs.com/assets/script/jquery-1.11.1.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/chart.js@2.9.4"></script>
<script type="text/javascript">
var pm25 = document.getElementById('PM25').getContext('2d');
window.onload = function () {
var dataPoints1 = [];
$.getJSON("https://checkup-7b62e.firebaseio.com/meteo_radauti.json", function(meteo)
{
$.each(meteo, function(key, value){
dataPoints1.push({x: value[0], y: value[9]});
//How to make this array write the last 20 elements, and not the first 20, like it is now
return key<20;
});
var chartColors = {
red: 'rgb(255, 99, 132)',
blue: 'rgb(54, 162, 235)'
};
var PM25 = new Chart(pm25, {
type: 'bar',
data: {
labels: dataPoints1.map(x => x.x),
datasets:
[{
data: dataPoints1.map(y => y.y),
label: 'PM2.5 (ppm)',
backgroundColor: chartColors.blue,
borderColor: "red",
fill: true,
responsive: true
},
]}
});
var dataset = PM25.data.datasets[0];
for(i=0;i<dataset.data.length;i++){
var color="green";
if(dataset.data[i].value>40){
dataset.backgroundColor[i] = red;
}
else if(dataset.data[i].value>60){
dataset.backgroundColor[i] = blue;
}
console.log(dataset.backgroundColor[i])
}
PM25.update();
})}
</script>
</html>
要显示 borderColor,您需要将 borderWidth 设置为大于 0 的值,要获取最后 20 个值,您可以使用 for 循环并在结束前开始 20 个值。最后,对于不同的颜色条,您可以使用 scribtable 选项。
示例:
<!DOCTYPE HTML>
<html>
<head>
</head>
<body>
<canvas id="PM25">test</canvas>
</body>
<script type="text/javascript" src="https://canvasjs.com/assets/script/jquery-1.11.1.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/chart.js@2.9.4"></script>
<script type="text/javascript">
var pm25 = document.getElementById('PM25').getContext('2d');
window.onload = function() {
var dataPoints1 = [];
$.getJSON("https://checkup-7b62e.firebaseio.com/meteo_radauti.json", function(meteo) {
for (i = meteo.length - 20; i < meteo.length; i++) {
dataPoints1.push({
x: meteo[i][0],
y: meteo[i][9]
});
}
var chartColors = {
red: 'rgb(255, 99, 132)',
blue: 'rgb(54, 162, 235)'
};
var PM25 = new Chart(pm25, {
type: 'bar',
data: {
labels: dataPoints1.map(x => x.x),
datasets: [{
data: dataPoints1.map(y => y.y),
label: 'PM2.5 (ppm)',
backgroundColor: (ctx) => (ctx.dataset.data[ctx.dataIndex] > 60 ? chartColors.blue : ctx.dataset.data[ctx.dataIndex] > 40 ? chartColors.red : "green"),
borderColor: chartColors.red,
borderWidth: 1
}, ]
}
});
})
}
</script>
</html>
我正在从 JSON 中读取一些数据,并且我正在使用 Charts.js 绘制值与时间的关系图。但是,我无法解决两件事:
- 我无法读取最后的 20 个元素
- 我无法根据值使条形图改变颜色
关于 1,我已经设法使用 return key<20;
读取了前 20 个元素,但我不知道如何读取最后一个元素。我已经尝试使用 return [key.length-1,key.length-20]
,但实际上并没有用。
关于2,我试过一些其他人遇到的不同方法和Fiddle的一些代码,但它不起作用。控制台显示 chartColors
中的元素。谁能帮我解决这两个问题?
下面的代码工作得很好,给出这个:
我想要这样的东西:
<!DOCTYPE HTML>
<html>
<head>
</head>
<body>
<canvas id="PM25">test</canvas>
</body>
<script type="text/javascript" src="https://canvasjs.com/assets/script/jquery-1.11.1.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/chart.js@2.9.4"></script>
<script type="text/javascript">
var pm25 = document.getElementById('PM25').getContext('2d');
window.onload = function () {
var dataPoints1 = [];
$.getJSON("https://checkup-7b62e.firebaseio.com/meteo_radauti.json", function(meteo)
{
$.each(meteo, function(key, value){
dataPoints1.push({x: value[0], y: value[9]});
//How to make this array write the last 20 elements, and not the first 20, like it is now
return key<20;
});
var chartColors = {
red: 'rgb(255, 99, 132)',
blue: 'rgb(54, 162, 235)'
};
var PM25 = new Chart(pm25, {
type: 'bar',
data: {
labels: dataPoints1.map(x => x.x),
datasets:
[{
data: dataPoints1.map(y => y.y),
label: 'PM2.5 (ppm)',
backgroundColor: chartColors.blue,
borderColor: "red",
fill: true,
responsive: true
},
]}
});
var dataset = PM25.data.datasets[0];
for(i=0;i<dataset.data.length;i++){
var color="green";
if(dataset.data[i].value>40){
dataset.backgroundColor[i] = red;
}
else if(dataset.data[i].value>60){
dataset.backgroundColor[i] = blue;
}
console.log(dataset.backgroundColor[i])
}
PM25.update();
})}
</script>
</html>
要显示 borderColor,您需要将 borderWidth 设置为大于 0 的值,要获取最后 20 个值,您可以使用 for 循环并在结束前开始 20 个值。最后,对于不同的颜色条,您可以使用 scribtable 选项。
示例:
<!DOCTYPE HTML>
<html>
<head>
</head>
<body>
<canvas id="PM25">test</canvas>
</body>
<script type="text/javascript" src="https://canvasjs.com/assets/script/jquery-1.11.1.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/chart.js@2.9.4"></script>
<script type="text/javascript">
var pm25 = document.getElementById('PM25').getContext('2d');
window.onload = function() {
var dataPoints1 = [];
$.getJSON("https://checkup-7b62e.firebaseio.com/meteo_radauti.json", function(meteo) {
for (i = meteo.length - 20; i < meteo.length; i++) {
dataPoints1.push({
x: meteo[i][0],
y: meteo[i][9]
});
}
var chartColors = {
red: 'rgb(255, 99, 132)',
blue: 'rgb(54, 162, 235)'
};
var PM25 = new Chart(pm25, {
type: 'bar',
data: {
labels: dataPoints1.map(x => x.x),
datasets: [{
data: dataPoints1.map(y => y.y),
label: 'PM2.5 (ppm)',
backgroundColor: (ctx) => (ctx.dataset.data[ctx.dataIndex] > 60 ? chartColors.blue : ctx.dataset.data[ctx.dataIndex] > 40 ? chartColors.red : "green"),
borderColor: chartColors.red,
borderWidth: 1
}, ]
}
});
})
}
</script>
</html>