javascript - 如何根据值更改点/线?
问题描述
所以我想显示一个折线图,当值低于 30 或高于 200 时变为红色,而介于两者之间的值变为灰色。我很难让它改变颜色。它只是以灰色显示图表上的点,我是 chart.js 的新手,所以任何建议都会有所帮助!我不知道为什么,但更新图表似乎没有更新。
data: {
labels: ['7/31/2018', '11/7/2018', '2/11/2019', '4/3/2019', '5/11/2019', '7/18/2019', 'extra', 'extra'],
datasets: [{
label: 'Systolic',
backgroundColor: 'rgba(0, 0, 0, 0)',
borderColor: 'rgba(0,0,0,1)',
pointBackgroundColor: 'grey',
pointRadius: '3',
pointHoverRadius: '3',
pointHoverBackgroundColor: 'white',
borderWidth: '1',
data: [117, 135, 90, 100, 106, 110, 29, 300]
}
},
// Configuration options go here
options: {
responsive: true,
maintainAspectRatio: false,
legend: {
display: false
},
scales: {
xAxes: [{
gridLines: {
display: false,
drawBorder: false,
},
ticks: {
display: false,
}
}],
yAxes: [{
gridLines: {
display: false,
drawBorder: false,
},
ticks: {
display: false,
suggestedMin: 50,
stepValue: 50,
suggestedMax: 150
}
}]
},
layout: {
padding: {
left: 0,
right: 10,
top: 10,
bottom: 0
}
},
tooltips: {
displayColors: false,
caretSize: 5,
bodyFontSize: 11,
callbacks: {
title: function() {},
label: function(tooltipItem, data) {
return data.datasets[tooltipItem.datasetIndex].data[tooltipItem.index] + 'mmHg' + ' ' + data.labels[tooltipItem.index];
},
},
}
});
for (i = 0; i < 12; i++) {
var color = 'green';
if (datasets[0].data[i].value < 30) {
color = 'red';
} else if (datasets[0].data[i].value > 130) {
color = 'red';
} else {
color = 'grey';
}
data.datasets[0].data[i].BackgroundColor = color;
data.datasets[0].data[i].pointBackgroundColor = color;
}
myObjBar.update();
解决方案
我强烈推荐Bands 插件的这个分支(因为 Bands 插件每个图表只允许一个波段,而分支允许两个)。
比自己写东西容易处理而且容易得多,因为没有chartjs-build-in-function。该插件完全适合您的用例。
https://jsbin.com/yikayukewu/edit?html,js,输出
在 JSBin 中,您可以看到插件及其 fork 的两种解决方案。因为我无法或无法导入 fork,所以您可以看到代码,但如果没有导入,它就无法工作。如果您调整评论,插件代码就可以工作。
这是fork的代码:
options: {
bands: {
yValueMin: 35,
yValueMax: 55,
belowMinThresholdColour: [
'rgb(255, 100, 100)'
],
aboveMaxThresholdColour: [
'rgb(255, 100, 100)'
]
}
}
推荐阅读
- r - 如何进行for循环以查找多个数据框中列的平均值并添加新列?
- excel - 使用 VBA 替代 Vlookup。比较列中的值并将相应值从第二列复制到另一列
- sqlite - SQLite3根据列创建两次合并行的视图利润
- discord - 服务器到服务器自动复制和粘贴功能
- python - 在 Colab 中绘图时,python-igraph“'bytes' 对象没有属性'encode'”
- storyblok - 如何在自定义字段类型中获取选定的语言环境?
- python - 如何在python中编写makefile?
- c# - 应跨越 4 列的 GridView 数据全部显示在第一列下
- java - 使用可变参数时是否创建了新数组?
- fullcalendar - FullCalendar - 从数据库数据中显示用户的工作日程