使用Chart.js设置条形图和线条的样式
我们已经使用Chart.js好几个月了,喜欢它给我们带来的轻松编程的能力。我们希望开始向Chart.js生成的图表中添加的一件事情是,我们生成的图表的样式稍微好一点。我们使用的大多数图表都是条形图,还有一些折线图 当我使用“造型”这个术语时,我真正要说的是使横条或线条看起来更漂亮一点。具体来说,我想在条形图和折线图后面添加阴影,甚至在条形图上添加斜角 我看了很多问题,似乎找不到我要找的东西。我自己也做了一些实验,修改了Chart.js文件,在javascript中添加了阴影和模糊,但我没有将其添加到正确的位置。我将这些更改放在Chart.Element.extend draw函数中:使用Chart.js设置条形图和线条的样式,chart.js,dropshadow,bevelled,Chart.js,Dropshadow,Bevelled,我们已经使用Chart.js好几个月了,喜欢它给我们带来的轻松编程的能力。我们希望开始向Chart.js生成的图表中添加的一件事情是,我们生成的图表的样式稍微好一点。我们使用的大多数图表都是条形图,还有一些折线图 当我使用“造型”这个术语时,我真正要说的是使横条或线条看起来更漂亮一点。具体来说,我想在条形图和折线图后面添加阴影,甚至在条形图上添加斜角 我看了很多问题,似乎找不到我要找的东西。我自己也做了一些实验,修改了Chart.js文件,在javascript中添加了阴影和模糊,但我没有将其添
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
});
Fiddle-这适用于新版本的Chart JS 我们可以创建一个插件对象并注册到chart JS,插件是开发者在创建图表时修改图表的一种方式,仅供参考,请查看 向任何图表添加阴影的示例插件
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);
});
试过了吗?土豆皮,谢谢!这件事怎么没有被评为令人震惊。在10个阴影答案中,这是唯一一个最简单但更重要的是唯一有效的答案。非常感谢。你能扩展饼图吗?你能解释一下你用ctx.stroke做了什么吗?文档说它可以接收一个Path2D,但是你可以传递一个自定义函数。谢谢你的回答@MiguelPéres-我用猴子修补了它-基本上用我自己的一个实现替换了实际的实现,在调用我存储在
originalStroke
中的原始实际实现之前,它做了一些其他的事情。我尝试了这个解决方案,它可以工作,但我也得到了网格上的蓝色阴影。。。我做错了什么?