我们一直在使用chart.js之现在好几个月,并喜欢它给我们易于编程的力量。其中一个我们想开始加入到从chart.js之制作图表的事情是,我们将生成图表的更好一点的造型。大部分我们所使用的图表是条形图,其中投入了几线走势图。
当我使用术语“造型”什么我真的说的是使条形或线条看起来更好一点。具体来说,我想即使是斜角添加阴影的条形图和折线图的背后,也许到了酒吧。
我已经经历了很多问题看上去,似乎无法找到我所期待的。我也做了一些通过修改chart.js之文件,添加阴影和模糊的JavaScript尝试自己,但我没有得到它在正确的位置添加。我把Chart.Element.extend绘制函数里面这些变化:
ctx.shadowColor = '#000';
ctx.shadowBlur = 10;
ctx.shadowOffsetX = 8;
ctx.shadowOffsetY = 8;
我把它放在ctx.fill(前右)和几乎我想要做什么。结果是我得到一个阴影,看起来棒和折线图我画上都相当不错,但我也得到了标签为x和y轴,这并不好看阴影。我想对刚棒和线的阴影,而不是在标签上。
您可以提供任何帮助将不胜感激。我不是用JavaScript经验丰富,但已经能够拉过相当多的编码我本来没有能没有大家对堆栈溢出的帮助下做的。
您可以延长线图表类型,要做到这一点
预习
脚本
Chart.types.Line.extend({
name: "LineAlt",
initialize: function () {
Chart.types.Line.prototype.initialize.apply(this, arguments);
var ctx = this.chart.ctx;
var originalStroke = ctx.stroke;
ctx.stroke = function () {
ctx.save();
ctx.shadowColor = '#000';
ctx.shadowBlur = 10;
ctx.shadowOffsetX = 8;
ctx.shadowOffsetY = 8;
originalStroke.apply(this, arguments)
ctx.restore();
}
}
});
接着
...
var myChart = new Chart(ctx).LineAlt(data, {
datasetFill: false
});
ᴘʀᴇᴠɪᴇᴡ
ꜱᴄʀɪᴘᴛ重写绘制函数
let draw = Chart.controllers.line.prototype.draw;
Chart.controllers.line.prototype.draw = function() {
draw.apply(this, arguments);
let ctx = this.chart.chart.ctx;
let _stroke = ctx.stroke;
ctx.stroke = function() {
ctx.save();
ctx.shadowColor = '#07C';
ctx.shadowBlur = 10;
ctx.shadowOffsetX = 0;
ctx.shadowOffsetY = 4;
_stroke.apply(this, arguments);
ctx.restore();
}
};
let draw = Chart.controllers.line.prototype.draw;
Chart.controllers.line.prototype.draw = function() {
draw.apply(this, arguments);
let ctx = this.chart.chart.ctx;
let _stroke = ctx.stroke;
ctx.stroke = function() {
ctx.save();
ctx.shadowColor = '#07C';
ctx.shadowBlur = 10;
ctx.shadowOffsetX = 0;
ctx.shadowOffsetY = 4;
_stroke.apply(this, arguments);
ctx.restore();
}
};
let ctx = document.querySelector("#canvas").getContext('2d');
let myChart = new Chart(ctx, {
type: 'line',
data: {
labels: ["January", "February", "March", "April", "May", "June", "July"],
datasets: [{
data: [65, 59, 75, 64, 70, 30, 40],
borderColor: '#07C',
pointBackgroundColor: "#FFF",
pointBorderColor: "#07C",
pointHoverBackgroundColor: "#07C",
pointHoverBorderColor: "#FFF",
pointRadius: 4,
pointHoverRadius: 4,
fill: false,
tension: 0.15
}]
},
options: {
responsive: false,
tooltips: {
displayColors: false,
callbacks: {
label: function(e, d) {
return `${e.xLabel} : ${e.yLabel}`
},
title: function() {
return;
}
}
},
legend: {
display: false
},
scales: {
yAxes: [{
ticks: {
max: 90
}
}]
}
}
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.5.0/Chart.min.js"></script>
<canvas id="canvas" width="400" height="210" style="background-color: #E4E8F0"></canvas>
这适用于图JS我们可以创建一个插件对象,并注册到图表JS的新版本,插件是为正在创建其开发者修改图表的方式,请参考一下
https://riptutorial.com/chart-js/example/22332/plugins-introduction
示例插件将阴影添加到任何图表的
var simpleplugin = {
beforeDraw : function(chartInstance)
{
let _stroke = chartInstance.ctx.stroke;
chartInstance.ctx.stroke = function () {
chartInstance.ctx.save();
chartInstance.ctx.shadowColor = 'gray';
chartInstance.ctx.shadowBlur = 10;
chartInstance.ctx.shadowOffsetX = 2;
chartInstance.ctx.shadowOffsetY = 2;
_stroke.apply(this, arguments)
chartInstance.ctx.restore();
}
let _fill = chartInstance.ctx.fill;
ctx.fill = function () {
chartInstance.ctx.save();
chartInstance.ctx.shadowColor = 'gray';
chartInstance.ctx.shadowBlur = 10;
chartInstance.ctx.shadowOffsetX = 2;
chartInstance.ctx.shadowOffsetY = 2;
_fill.apply(this, arguments)
chartInstance.ctx.restore();
}
}
}
$(function()
{
Chart.pluginService.register(simpleplugin);
});