Chart.js 气泡图 pointStyle 无效
Chart.js bubble chart pointStyle not working
我正在使用 chart.js 气泡图。我正在尝试将 pointStyle 从圆圈更改为其他内容。我已经根据文档尝试了所有方法,但仍然无法正常工作。有人可以帮助理解我做错了什么吗?
Chart.defaults.global.elements.point.pointStyle = 'star';
Chart.defaults.global.elements.point.backgroundColor = 'rgba(255,255,255,1)';
Chart.defaults.global.elements.point.radius = 20;
var data = {
datasets:[{
pointStyle: 'triangle',
//pointRadius: 8,
// data:[ 27, 33, 49 ],
data:[{ x:0, y: 0}]
}]
};
var options = {
responsive: true,
title:{
display:true,
text:'Chart.js Bubble Chart'
},
tooltips: {
mode: 'point'
}
};
var canvas = document.getElementById('myChart');
var myBubbleChart = new Chart(canvas,{
type: 'bubble',
data: data,
options: options
});0
我可以更改折线图,但似乎无法让气泡图更改 pointStyle。
https://jsfiddle.net/charleschiu/h31vfgnq/
谢谢
显然,这是行不通的,因为pointStyle
仅适用于折线图(有悬停点)。不幸的是,也没有任何本机选项可以实现这一点。
但是,此云可以通过某种 hackish 方式实现,即覆盖气泡图的实际 draw
功能。
ᴏᴠᴇʀʀɪᴅᴇ ᴛʜᴇ ᴅʀᴀᴡ ꜰᴜɴᴄᴛɪᴏɴ ᴏꜰ ʙᴜʙʙʟᴇ ᴄʜᴀʀᴛ
Chart.controllers.bubble.prototype.draw = function() {
let c = this.chart; // chart instance
let datasets = c.data.datasets; // datasets array
datasets.forEach(function(e, i) { // loop through the datasets array
let isHidden = e._meta[0].hidden; // dataset's hidden property
if (!isHidden) { // if dataset is not hidden
let data = c.getDatasetMeta(i).data; // coords array of bubble
data.forEach(function(e) { // loop through the coords array
let ctx = c.chart.ctx; // canvas context
let x = e._model.x; // x coord of bubble
let y = e._model.y; // y coord of bubble
let r = e._model.radius; // radius of bubble
let bgColor = e._model.backgroundColor; // background color of bubble
/** draw anything using general canvas methods **/
// draw a triangle
ctx.save();
ctx.moveTo(x, y - r);
ctx.lineTo(x + r, y + r);
ctx.lineTo(x - r, y + r);
ctx.closePath();
ctx.fillStyle = bgColor;
ctx.fill();
ctx.restore();
});
}
});
}
ᴡᴏʀᴋɪɴɢ ᴇxᴀᴍᴘʟᴇ⧩
Chart.controllers.bubble.prototype.draw = function() {
let c = this.chart; // chart instance
let datasets = c.data.datasets; // datasets array
datasets.forEach(function(e, i) { // loop through the datasets array
let isHidden = e._meta[0].hidden; // dataset's hidden property
if (!isHidden) { // if dataset is not hidden
let data = c.getDatasetMeta(i).data; // coords array of bubble
data.forEach(function(e) { // loop through the coords array
let ctx = c.chart.ctx; // canvas context
let x = e._model.x; // x coord of bubble
let y = e._model.y; // y coord of bubble
let r = e._model.radius; // radius of bubble
let bgColor = e._model.backgroundColor; // background color of bubble
/** draw anything using general canvas methods **/
// draw a triangle
ctx.save();
ctx.moveTo(x, y - r);
ctx.lineTo(x + r, y + r);
ctx.lineTo(x - r, y + r);
ctx.closePath();
ctx.fillStyle = bgColor;
ctx.fill();
ctx.restore();
});
}
});
}
var data = {
datasets: [{
label: 'Dataset 1',
data: [
{ x: 6, y: 6, r: 10 },
{ x: 12, y: 12, r: 15 }
],
backgroundColor: '#07C'
}]
};
var options = {
responsive: false,
scales: {
xAxes: [{ ticks: { min: 0, max: 20 } }],
yAxes: [{ ticks: { min: 0, max: 20 } }]
},
title: {
display: true,
text: 'Chart.js Bubble Chart'
}
};
var canvas = document.getElementById('myChart');
var myBubbleChart = new Chart(canvas, {
type: 'bubble',
data: data,
options: options
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.6.0/Chart.js"></script>
<canvas id="myChart" width="350" height="200"></canvas>
我正在使用 chart.js 气泡图。我正在尝试将 pointStyle 从圆圈更改为其他内容。我已经根据文档尝试了所有方法,但仍然无法正常工作。有人可以帮助理解我做错了什么吗?
Chart.defaults.global.elements.point.pointStyle = 'star';
Chart.defaults.global.elements.point.backgroundColor = 'rgba(255,255,255,1)';
Chart.defaults.global.elements.point.radius = 20;
var data = {
datasets:[{
pointStyle: 'triangle',
//pointRadius: 8,
// data:[ 27, 33, 49 ],
data:[{ x:0, y: 0}]
}]
};
var options = {
responsive: true,
title:{
display:true,
text:'Chart.js Bubble Chart'
},
tooltips: {
mode: 'point'
}
};
var canvas = document.getElementById('myChart');
var myBubbleChart = new Chart(canvas,{
type: 'bubble',
data: data,
options: options
});0
我可以更改折线图,但似乎无法让气泡图更改 pointStyle。
https://jsfiddle.net/charleschiu/h31vfgnq/
谢谢
显然,这是行不通的,因为pointStyle
仅适用于折线图(有悬停点)。不幸的是,也没有任何本机选项可以实现这一点。
但是,此云可以通过某种 hackish 方式实现,即覆盖气泡图的实际 draw
功能。
ᴏᴠᴇʀʀɪᴅᴇ ᴛʜᴇ ᴅʀᴀᴡ ꜰᴜɴᴄᴛɪᴏɴ ᴏꜰ ʙᴜʙʙʟᴇ ᴄʜᴀʀᴛ
Chart.controllers.bubble.prototype.draw = function() {
let c = this.chart; // chart instance
let datasets = c.data.datasets; // datasets array
datasets.forEach(function(e, i) { // loop through the datasets array
let isHidden = e._meta[0].hidden; // dataset's hidden property
if (!isHidden) { // if dataset is not hidden
let data = c.getDatasetMeta(i).data; // coords array of bubble
data.forEach(function(e) { // loop through the coords array
let ctx = c.chart.ctx; // canvas context
let x = e._model.x; // x coord of bubble
let y = e._model.y; // y coord of bubble
let r = e._model.radius; // radius of bubble
let bgColor = e._model.backgroundColor; // background color of bubble
/** draw anything using general canvas methods **/
// draw a triangle
ctx.save();
ctx.moveTo(x, y - r);
ctx.lineTo(x + r, y + r);
ctx.lineTo(x - r, y + r);
ctx.closePath();
ctx.fillStyle = bgColor;
ctx.fill();
ctx.restore();
});
}
});
}
ᴡᴏʀᴋɪɴɢ ᴇxᴀᴍᴘʟᴇ⧩
Chart.controllers.bubble.prototype.draw = function() {
let c = this.chart; // chart instance
let datasets = c.data.datasets; // datasets array
datasets.forEach(function(e, i) { // loop through the datasets array
let isHidden = e._meta[0].hidden; // dataset's hidden property
if (!isHidden) { // if dataset is not hidden
let data = c.getDatasetMeta(i).data; // coords array of bubble
data.forEach(function(e) { // loop through the coords array
let ctx = c.chart.ctx; // canvas context
let x = e._model.x; // x coord of bubble
let y = e._model.y; // y coord of bubble
let r = e._model.radius; // radius of bubble
let bgColor = e._model.backgroundColor; // background color of bubble
/** draw anything using general canvas methods **/
// draw a triangle
ctx.save();
ctx.moveTo(x, y - r);
ctx.lineTo(x + r, y + r);
ctx.lineTo(x - r, y + r);
ctx.closePath();
ctx.fillStyle = bgColor;
ctx.fill();
ctx.restore();
});
}
});
}
var data = {
datasets: [{
label: 'Dataset 1',
data: [
{ x: 6, y: 6, r: 10 },
{ x: 12, y: 12, r: 15 }
],
backgroundColor: '#07C'
}]
};
var options = {
responsive: false,
scales: {
xAxes: [{ ticks: { min: 0, max: 20 } }],
yAxes: [{ ticks: { min: 0, max: 20 } }]
},
title: {
display: true,
text: 'Chart.js Bubble Chart'
}
};
var canvas = document.getElementById('myChart');
var myBubbleChart = new Chart(canvas, {
type: 'bubble',
data: data,
options: options
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.6.0/Chart.js"></script>
<canvas id="myChart" width="350" height="200"></canvas>