寻求帮助:如何在图表上永久显示数据标签并与其位置一致
P粉302160436
P粉302160436 2023-08-15 23:21:18
[CSS3讨论组]

我想在图表上永久显示这些数据标签,以便它们始终可见,而不仅仅在鼠标悬停时可见。有人可以帮我吗?[这是一个示例,类似于这个]我也放下了我的代码。 (https://i.stack.imgur.com/TY8X1.png)

<!DOCTYPE html> <html lang="en"> 
<head> 
<meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>饼图示例</title> 
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script> 
</head> 
<body> 
<div style="position: relative;"> 
<canvas id="pieChart" width="400" height="400"></canvas> 
</div>

<script> 
// 获取canvas元素
var canvas = document.getElementById('pieChart');
// 创建饼图
var pieChart = new Chart(canvas, {
  type: 'pie',
  data: {
    labels: ['在线', '离线'],
    datasets: [{
      data: [8, 2],
      backgroundColor: ['rgba(71, 190, 125, 1)', 'rgba(241, 65, 108, 1)'],
      borderWidth: 0
    }]
  },
  options: {
    responsive: true,
    maintainAspectRatio: false,
    plugins: {
      legend: {
        display: false
      },
      datalabels: {
        color: '#fff',
        anchor: 'end', // 数据标签的位置(start, center, end)
        align: 'end', // 文本对齐方式(start, center, end)
        offset: 10,   // 标签与图表的偏移量
        formatter: (value, ctx) => {
          let label = ctx.chart.data.labels[ctx.dataIndex];
          return label + ': ' + value + '%';
        }
      }
    }
  }
});
</script>   
</body>   
</html>


P粉302160436
P粉302160436

全部回复(1)
P粉739706089

我为标签添加了一个独立的容器,并将其样式设置为与图表颜色相匹配。我使用flexbox将标签定位在图表的左侧。positionLabelsContainer()函数根据图表大小定位标签容器,并添加了一个事件监听器以在窗口调整大小时重新定位。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>饼图示例</title>
    <script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
</head>
<body>
    <div style="position: relative;">
        <canvas id="pieChart" width="400" height="400"></canvas>
        <div id="labels-container" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; display: flex; justify-content: center; align-items: center;">
            <div style="display: flex; flex-direction: column; align-items: flex-start;">
                <div style="background-color: rgba(71, 190, 125, 1); width: 10px; height: 10px; margin-bottom: 5px;"></div>
                <div style="background-color: rgba(241, 65, 108, 1); width: 10px; height: 10px;"></div>
            </div>
            <div style="display: flex; flex-direction: column; align-items: flex-start; margin-left: 5px;">
                <div>在线: 8%</div>
                <div>离线: 2%</div>
            </div>
        </div>
    </div>

    <script>
        // 获取canvas元素
        var canvas = document.getElementById('pieChart');
        var labelsContainer = document.getElementById('labels-container');
        
        // 创建饼图
        var pieChart = new Chart(canvas, {
            type: 'pie',
            data: {
                labels: ['在线', '离线'],
                datasets: [{
                    data: [8, 2],
                    backgroundColor: ['rgba(71, 190, 125, 1)', 'rgba(241, 65, 108, 1)'],
                    borderWidth: 0
                }]
            },
            options: {
                responsive: true,
                maintainAspectRatio: false,
                plugins: {
                    legend: {
                        display: false
                    },
                    datalabels: false // 禁用数据标签,因为它们显示在自定义容器中
                }
            }
        });
        
        // 根据图表大小定位标签容器
        function positionLabelsContainer() {
            labelsContainer.style.width = canvas.offsetWidth + 'px';
            labelsContainer.style.height = canvas.offsetHeight + 'px';
        }

        positionLabelsContainer(); // 初始定位

        window.addEventListener('resize', positionLabelsContainer); // 调整大小时更新
    </script>
</body>
</html>
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号