javascript - 如何在 HTML5 中创建 "Pie Chart"?

标签 javascript html canvas charts pie-chart

我正在尝试使用 Canvas 对象创建一个“饼图”,但我想用图像而不是颜色填充每个切片。你认为这可能吗?我也尝试使用“createPattern”,但效果不佳。有什么建议吗?

在这里您可以找到我完成的一些代码,但它正在用颜色填充切片。

        var color = ["#ccc", "#222", "#fff", "#a61712", "#e42f13", "#2b6637", "#f9d90d", "#f4973a", "#002fba", "#800501"];
        var data = [10, 5, 28, 2, 20, 10, 5, 5, 10, 5];

        function getTotal(){
            var total = 0;
            for (var j = 0; j < data.length; j++) {
                total += (typeof data[j] == 'number') ? data[j] : 0;
            }
            return total;
        }

        function plotData() {
            var canvas;
            var ctx;
            var lastend = 0;
            var total = getTotal();

            canvas = document.getElementById("canvas");
            ctx = canvas.getContext("2d");
            ctx.clearRect(0, 0, canvas.width, canvas.height);

            for (var i = 0; i < data.length; i++) {
                ctx.fillStyle = color[i];
                ctx.beginPath();
                ctx.moveTo(200,150);
                ctx.arc(200, 150, 150, lastend,lastend+(Math.PI*2*(data[i]/total)),false);
                ctx.lineTo(200,150);
                ctx.strokeStyle = "#000";
                ctx.lineWidth = 5;
                ctx.stroke();
                ctx.fill();
                lastend += Math.PI*2*(data[i]/total);
            }
        }

        plotData();

最佳答案

您有多种选择来用图像或图案填充楔形。

对于任一选项,您都必须执行 ctx.closePath,以便您的图像/图案保持在楔形范围内。

执行 closePath 后,您应该会在填充图案方面取得更大的成功。 :-)

或者,设置由楔形创建的剪切区域:

  • 保存未剪辑的上下文状态:ctx.save();
  • 创建您的楔形路径。
  • 执行 ctx.clip() ,所有新绘图将仅在您的楔形内绘制
  • drawImage您的图像或图案填充(使用剪辑,图像将被限制在楔形中)
  • 恢复未剪辑的上下文状态:ctx.restore();

关于javascript - 如何在 HTML5 中创建 "Pie Chart"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22642176/

相关文章:

javascript - "canvas.toDataURL("图像/png ")"在 Firefox 中无法正常工作

javascript - 提交表单时页面重定向

javascript - 使用 jquery/php 查找链接是否已访问

javascript - 颜色总和为黑色

javascript - 如何从 Web 服务返回的 PNG 数据创建 FabricJS 图像?

html - 导航栏未正确居中 (HTML/CSS)

javascript - 如何在 Linux Web 服务器上运行 Phantomjs

javascript - JQuery - 在更改文本文本之前淡出文本

JavaScript if 语句不应该返回 true

html - 即使我使用 url ('../../images/image.png' 背景图像路径也不起作用)