Javascript Chart.js-同一画布上的多个甜甜圈图表
我试图通过在同一画布上多次初始化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>
<!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'
],
}, ]
},
...