Javascript Chart.js-同一画布上的多个甜甜圈图表

Javascript Chart.js-同一画布上的多个甜甜圈图表,javascript,jquery,canvas,charts,chart.js,Javascript,Jquery,Canvas,Charts,Chart.js,我试图通过在同一画布上多次初始化chart.js来模拟多层圆环图。此时只有一个图表可见。当您将鼠标悬停在其位置上时,另一个将可见 有人知道如何使两者同时可见吗 这是我的密码: <!doctype html> <html> <head> <title>Doughnut Chart</title> <script src="../Chart.js"></script>

我试图通过在同一画布上多次初始化chart.js来模拟多层圆环图。此时只有一个图表可见。当您将鼠标悬停在其位置上时,另一个将可见

有人知道如何使两者同时可见吗

这是我的密码:

<!doctype html>
<html>
    <head>
        <title>Doughnut Chart</title>
        <script src="../Chart.js"></script>
        <style>
            body{
                padding: 0;
                margin: 0;
            }
            #canvas-holder-1{
              position: fixed;
              top: 50%;
              left: 50%;
              margin-top: -250px;
              margin-left: -250px;
            }
        </style>
    </head>
    <body>
        <div id="canvas-holder-1">
            <canvas id="chart-area" width="500" height="500"/>
        </div>
<script>

        var doughnutData = [
                {
                    value: 20,
                    color:"#F7464A",
                    highlight: "#FF5A5E",
                    label: "Red",
                },
                {
                    value: 50,
                    color: "#46BFBD",
                    highlight: "#5AD3D1",
                    label: "Green"
                },
                {
                    value: 30,
                    color: "#FDB45C",
                    highlight: "#FFC870",
                    label: "Yellow"
                },
                {
                    value: 40,
                    color: "#949FB1",
                    highlight: "#A8B3C5",
                    label: "Grey"
                },
                {
                    value: 120,
                    color: "#4D5360",
                    highlight: "#616774",
                    label: "Dark Grey"
                }

            ];
            var doughnutData2 = [
                {
                    value: 10,
                    color:"#F7464A",
                    highlight: "#FF5A5E",
                    label: "Red",
                },
                {
                    value: 100,
                    color: "#46BFBD",
                    highlight: "#5AD3D1",
                    label: "Green"
                },
                {
                    value: 20,
                    color: "#FDB45C",
                    highlight: "#FFC870",
                    label: "Yellow"
                },
                {
                    value: 60,
                    color: "#949FB1",
                    highlight: "#A8B3C5",
                    label: "Grey"
                },
                {
                    value: 120,
                    color: "#4D5360",
                    highlight: "#616774",
                    label: "Dark Grey"
                }

            ];

            window.onload = function(){
                var ctx = document.getElementById("chart-area").getContext("2d");
                window.myDoughnut = new Chart(ctx).Doughnut(doughnutData, {
                  responsive : false,
                  animateScale: false,
                  animateRotate:false,
                  animationEasing : "easeOutSine",
                  animationSteps : 80,
                  percentageInnerCutout : 90,
                });
              myDoughnut.outerRadius= 200;
                window.myDoughnut2 = new Chart(ctx).Doughnut(doughnutData2, {
                  responsive : false,
                  animateScale: false,
                  animateRotate:false,
                  animationEasing : "easeOutSine",
                  animationSteps : 80,
                  percentageInnerCutout : 90
                                  });
            };



    </script>
    </body>
</html>

油炸圈饼图
身体{
填充:0;
保证金:0;
}
#帆布夹-1{
位置:固定;
最高:50%;
左:50%;
利润上限:-250px;
左边距:-250px;
}
var doughnutData=[
{
价值:20,
颜色:#F7464A“,
亮点:“FF5A5E”,
标签:“红色”,
},
{
价值:50,
颜色:“46BFBD”,
亮点:“5AD3D1”,
标签:“绿色”
},
{
数值:30,
颜色:“FDB45C”,
亮点:“FFC870”,
标签:“黄色”
},
{
价值:40,
颜色:“949FB1”,
亮点:“A8B3C5”,
标签:“灰色”
},
{
数值:120,
颜色:“4D5360”,
亮点:“616774”,
标签:“深灰色”
}
];
var doughnutData2=[
{
数值:10,
颜色:#F7464A“,
亮点:“FF5A5E”,
标签:“红色”,
},
{
数值:100,
颜色:“46BFBD”,
亮点:“5AD3D1”,
标签:“绿色”
},
{
价值:20,
颜色:“FDB45C”,
亮点:“FFC870”,
标签:“黄色”
},
{
价值:60,
颜色:“949FB1”,
亮点:“A8B3C5”,
标签:“灰色”
},
{
数值:120,
颜色:“4D5360”,
亮点:“616774”,
标签:“深灰色”
}
];
window.onload=函数(){
var ctx=document.getElementById(“图表区”).getContext(“2d”);
window.myDoughnut=新图表(ctx).Doughnut(doughnutData{
回答:错,
动画缩放:错误,
animateRotate:false,
动画化:“easeOutSine”,
动画步骤:80,
百分比内部断路器:90,
});
外面包圈=200;
window.myDoughnut2=新图表(ctx).Doughnut(doughnutData2{
回答:错,
动画缩放:错误,
animateRotate:false,
动画化:“easeOutSine”,
动画步骤:80,
百分比内部断路器:90
});
};
谢谢,
Jochen有两个画布元素,并使用CSS将它们一个放置在另一个之上。内部画布具有内部甜甜圈,并具有圆形边框,以便尽可能少地覆盖外部甜甜圈


预览


HTML

<div id="w">
    <canvas id="d1" height="400" width="400"></canvas>
    <canvas id="d2" height="320" width="320"></canvas>
</div>
小提琴-

在这一点上,我们有一个相当不错的饼图,没有重叠的甜甜圈,但是我们的工具提示会被剪掉,因为它们仍然是各自画布的一部分

我们可以通过编写customTooltips函数来解决这个问题,使用div而不是在画布中绘制矩形


Fiddle-

您可以使用多个数据集,请查看图表JS演示页面:

此外,这里还有一个包含多个数据集和多个标签的示例:

重要的部分是:

  ...
  var myChart = new Chart(ctx, {
    type: 'doughnut',
    data: {
      labels: ["Green", "Yellow", "Red", "Purple", "Blue"],
      datasets: [{
        data: [1, 2, 3, 4, 5],
        backgroundColor: [
          'green',
          'yellow',
          'red',
          'purple',
          'blue',
        ],
        labels: [
          'green',
          'yellow',
          'red',
          'purple',
          'blue',
        ]
      }, {
        data: [6, 7, 8],
        backgroundColor: [
          'black',
          'grey',
          'lightgrey'
        ],
        labels: [
          'black',
          'grey',
          'lightgrey'
        ],
      }, ]
    },
    ...

希望它能帮助那些尝试做同样事情的人。

嘿,谢谢。不幸的是,我需要它们更紧密地结合在一起,就像这样:[link]问题是较小的画布与较大的甜甜圈重叠。因此,它在角落里是不可点击的。这就是为什么我试着只用一块画布啊,是的,这就是为什么我最初把它的尺寸缩小了。使用一个画布的问题是Chart.js在每次绘制之前都会清除画布。请查看最后一个提琴-圆角边框和自定义工具提示的组合有望解决重叠问题。customTooltips函数中的定位有点不准确-我大部分都是从这里得到的。向上投聪明票。:-)恕我直言,ChartJS是一个优秀的基本图表库,但我看到许多问题询问如何使用它超出预期的设计。大多数答案虽然聪明,但有点老套。因为ChartJS是MIT授权的,所以最好修改它的源代码以适应基本API之外的需求。一如既往,有限的时间和资源可能不允许。。。
  ...
  var myChart = new Chart(ctx, {
    type: 'doughnut',
    data: {
      labels: ["Green", "Yellow", "Red", "Purple", "Blue"],
      datasets: [{
        data: [1, 2, 3, 4, 5],
        backgroundColor: [
          'green',
          'yellow',
          'red',
          'purple',
          'blue',
        ],
        labels: [
          'green',
          'yellow',
          'red',
          'purple',
          'blue',
        ]
      }, {
        data: [6, 7, 8],
        backgroundColor: [
          'black',
          'grey',
          'lightgrey'
        ],
        labels: [
          'black',
          'grey',
          'lightgrey'
        ],
      }, ]
    },
    ...