javascript - 将文本添加到圆环图 - ChartJS

标签 javascript jquery html css chart.js

我有图表

<div class="col-xs-2"><canvas id="device"></canvas></div>
<div class="col-xs-2"><canvas id="host_name"></canvas></div>
<div class="col-xs-2"><canvas id="city"></canvas></div>
<div class="col-xs-2"><canvas id="org"></canvas></div>
<div class="col-xs-2"><canvas id="country"></canvas></div>
<div class="col-xs-2"><canvas id="region"></canvas></div>

enter image description here


CSS

<style type="text/css">
    .chart-inner {
        margin-top: -100px;
        margin-bottom: 100px;
    }
    .chart-inner h5 {
        margin-bottom: 5px;
        margin-top: 27px;
        font-size: 200px;
        color: red;
    }

</style>

我尝试将文本附加到中心

$('canvas#' + selector).append('<div class="chart-inner"><h5>' + selector + '</h5></div>');

好像没有成功。


但是当我 hide() 时,它就起作用了。所有图表均被隐藏。

$('canvas#' + selector).hide();

我错过了什么?


已更新

<script>

    function renderChart(selector, chartType, colors, labels, values, chartLine ) {


        let chart = document.getElementById(selector).getContext('2d');

        new Chart(chart, {
            type:chartType, // bar, horizontalBar, pie, line, doughnut, radar, polarArea
            data:{
                labels:labels,
                datasets:[{
                    data:values,
                    // backgroundColor:colors,
                    backgroundColor:colors,
                    borderWidth:1,
                    borderColor:'white',
                    hoverBorderWidth:2,
                    hoverBorderColor:colors,
                    hoverBorderWidth: 2,
                    borderAlign: 'inner',
                }]
            },
            options:{
                title:{
                    display:true,
                    text:selector
                },
                legend:{
                    display:false,
                    position:'right',
                    labels:{
                        fontColor:'#000'
                    }
                },
                cutoutPercentage: 70,
                animation:{
                    animateScale:true,
                },
            }
        });


        // $('canvas#' + selector).append('<div class="chart-inner"><h5>' + selector + '</h5></div>');
        // $('canvas#' + selector).hide();
        //$('canvas#device').append('<div class="chart-inner"><h5>1234</h5></div>');
    }

    /*=========================================
    =            deviceType            =
    =========================================*/

    var ajax = $.ajax({url: '/visitor/summary/device'});
    ajax.done(function (response) {

        deviceTypeLabels = [];
        deviceTypeValues = [];

        $.each(response, function(key,val) {
            deviceTypeLabels.push(key);
            deviceTypeValues.push(val);
        });

        renderChart('device', 'doughnut', colors, deviceTypeLabels, deviceTypeValues );

    });

    ... and more charts ...  


</script>

最佳答案

I've tried to append text to the center

您正在 canvas 标记内附加元素。 That's only displayed as a fallback when your browser lacks canvas support .

您正在寻找的是使用 canvas getContext 方法。

Jsfiddle example

根据您提供的内容进行调整,它会是这样的:

var centerX = chart.width / 2;
var centerY = chart.height / 2;

chart.fillStyle = 'black';
chart.font = '200px';
chart.textAlign = 'center';
chart.fillText(selector, centerX, centerY);

您可能需要偏移 centerX 或 centerY,具体取决于圆环图宽度的计算方式。

关于javascript - 将文本添加到圆环图 - ChartJS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58423676/

相关文章:

jquery - 根据另一个 div 中的元素更改一个 div 的 CSS 属性

jquery - 网站不适合 Ipad 和 iPhone

CSS:是否可以将高度为 100% 的 div 嵌套在高度为 auto 的 div 中?

php - 将机器人与人类访客区分开来获取统计信息?

javascript - 错误: Can't set headers after they are sent - Correctly handling an error in an express controller

php - smartwizard 4 中的所有步骤均处于事件状态

html - Div 中 IE 7、8、9 中的垂直间距

javascript - 在 Javascript/JQuery 中对数组进行排序

javascript - 我可以获取从 url 加载的图像的 blob 数据吗?

jquery - 在 jQuery One Page Nav 插件中更改导航事件部分的样式