亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何自定義圖表js條形圖形狀?

如何自定義圖表js條形圖形狀?

慕田峪9158850 2023-08-05 21:03:33
如何更改 Chart Js 的條形圖形狀,使其具有尖尖的頂部和底部,如下圖所示?
查看完整描述

1 回答

?
慕森王

TA貢獻1777條經驗 獲得超3個贊

獲取三角形的一種方法是制作堆積圖,并在頂部添加折線圖。為了保持其反應性,您需要動態調整線條數據上的 pointRadius 的大小。

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

或者在 Chart.js 的第 4640 行,您可以將 element_rectangle 繪制函數更改為:

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();

    },

產生這樣的結果:

https://img1.sycdn.imooc.com//64ce48f10001b96303900395.jpg

更有可能從源導入 Chart.js,您將需要制作自己的圖表類型作為條形圖的擴展。


(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);


查看完整回答
反對 回復 2023-08-05
  • 1 回答
  • 0 關注
  • 119 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號