首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何自定义图表js条形图形状?

如何自定义图表js条形图形状?
EN

Stack Overflow用户
提问于 2020-11-16 21:39:52
回答 1查看 452关注 0票数 2

如何更改Chart Js的条形图形状,使其顶部和底部具有如图所示的尖顶和尖底?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-21 13:25:14

获取三角形的一种方法是绘制堆叠图,然后在顶部添加折线图。要使其保持响应性,您需要动态调整行数据上的pointRadius的大小。

https://jsfiddle.net/0mcd5s13/3/

或者在chart.js的第4640行,您可以将element_rectangle绘图函数更改为:

代码语言:javascript
运行
复制
draw: function() {
        var ctx = this._chart.ctx;
        var vm = this._view;
        var rects = boundingRects(vm);
        var outer = rects.outer;
        var inner = rects.inner;

        //ctx.fillStyle = vm.backgroundColor;
        //ctx.fillRect(outer.x, outer.y, outer.w, outer.h);

        if (outer.w === inner.w && outer.h === inner.h) {
            return;
    }
    
    let offset = outer.w / 2;

        ctx.save();
    ctx.beginPath();
    
    ctx.moveTo(outer.x, outer.y);
    ctx.lineTo(outer.x, outer.y + outer.h);
    ctx.lineTo(outer.x + offset, outer.y + outer.h + offset);
    //ctx.lineTo(outer.x + offset, outer.y + outer.h);
    ctx.lineTo(outer.x + outer.w, outer.y + outer.h);
    ctx.lineTo(outer.x + outer.w, outer.y);
    ctx.lineTo(outer.x + offset, outer.y - offset);
    ctx.lineTo(outer.x, outer.y);
    ctx.stroke();


        //ctx.rect(outer.x, outer.y, outer.w, outer.h);
         ctx.clip();
         ctx.fillStyle = vm.borderColor;
        // ctx.rect(inner.x, inner.y, inner.w, inner.h);
         ctx.fill('evenodd');
        ctx.restore();
    },

这会产生以下结果:

更有可能从源导入chart.js,您将需要制作自己类型的图表作为条形图的扩展。

代码语言:javascript
运行
复制
(function(Chart) {
  var helpers = Chart.helpers;

    Chart.defaults.triBar = {
        hover: {
            mode: "label"
        },
    dataset: {
      categoryPercentage: 0.8,
      barPercentage: 0.9
    },
        scales: {
            xAxes: [{
                type: "category",
                // grid line settings
                gridLines: {
                    offsetGridLines: true
                }
            }],
            yAxes: [{
                type: "linear"
            }]
        }
    };


  Chart.controllers.triangleBar = Chart.controllers.bar.extend({           
    
    //  
    //  extend element_rectangle draw function here
    //

  });    
}).call(this, Chart);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64859096

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档