如何在 highcharts 中禁用不可见的图例填充?

How to disble invisible legend padding in highcharts?

所以我正在使用 HighCharts 创建圆环图。其中我想根据以下参考图片自定义图例:

这是我可以生成的图像:

所以第一张图片是参考图片,第二张是我用下面的代码生成的:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Donut Chart</title>
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
    <script src="https://code.highcharts.com/highcharts.js"></script>
    <script src="https://code.highcharts.com/modules/exporting.js"></script>

<style id="compiled-css" type="text/css">
   
div.g_Container{
  position: relative;
  
  width: 1000px;
  height: 900px;
  
}

</style>

</head>
<body>
    <div class="g_Container">
           <div id="g_one"></div>
       
    </div>



<script>
Highcharts.chart('g_one', {
    chart: {
        plotBackgroundColor: null,
        // spacingLeft: 5,
        plotShadow: false,
        width: 536,
        height: 194,
        align: 'left',
        // x:-40,
        // y:75
        
    },
    title: {
            text : '',
    },
    credits: {
            enabled: false
    },
 
    exporting:{
        width: 536,
        height: 194,
        align: 'left',
        // x: -10 
    },
    
    plotOptions: {
       
        pie: {
            slicedOffset: 2,
            dataLabels: {
                enabled: false,
                
            },
            startAngle: 100,
            endAngle: 100,
            showInLegend : true,
                           
        }
    },
    series: [{
        type: 'pie',
        // name, percentage of data, color, slicing is need or not//
        keys: ['name', 'y', 'color', 'sliced'],
        size: 168,
        innerSize: 112,
       
        
        // give data name, percentage the data occupies, color to represent the data//
        data: [
        ['Eateris', 10 ,'#22306b', true],
        ['General payments', 10, '#000000', true],
        ['Shoping',10, '#9ca4be', true],
        ['Travel and Transort', 10, '#e1808b', true],
        ['Pastimes', 10, '#6d7272', true],
        ['Family and home', 10, '#6298bf', true],
        ['Utilities', 10, '#4a548e', true],
        ['Health and beauty', 10, '#ab4735', true],
        ['Groceries', 10, '#5e7ab9', true],
        ['Groups and charity', 10, '#d0d1d0', true],            
        ],
            showInLegend: true,
            dataLabels: {
                enabled: false
            }
    }],
    legend: {
        
        align: 'right',
        verticalAlign: 'middle',
        horizontalAlign: 'left',
        height: 800,
        width: 260,
        // itemHeight: 50,
        itemWidth:90,
        
        
        itemStyle: {
                 font: 'Sans Serif Regular',
                
                 fontSize: 8,
                //  paddingBottom: 5 
              },
        labelFormatter: function() {
            return '<span style="color: '+this.color+'">'+ this.name + '</span>';},
        itemHoverStyle: {
                 color: '#444'
              },
        symbolHeight: 10,
       
        

        
    }
});
</script>
    
</body>
</html>

我想要实现的是,图例项之间应该有水平间隙,图例文本应该有 2 列和 5 行。 我已经根据那个给出了宽度,所以图例被分成两列。但是在图例的第二列之后还有很多 space ,但是图例的文本没有正确显示。 提前致谢

基本上您是想在底部的图例中添加一些边距,但您不希望图例上的文字换行。

我建议您增加 legend.width 的宽度并将 legend.itemWidth 设置为宽度的一半以实现您的 2 列格式。

现在来到保证金底部

可以用

legend.itemMarginBottom来实现。 每个图例项的像素底部边距。

默认为 0。

最后文字溢出:

legend.itemStyle.textOverflow : null

元素文本的换行符样式。设置宽度后,Highcharts SVG 元素支持省略号。

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Donut Chart</title>
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
    <script src="https://code.highcharts.com/highcharts.js"></script>
    <script src="https://code.highcharts.com/modules/exporting.js"></script>

    <style id="compiled-css" type="text/css">
        div.g_Container {
            position: relative;
            width: 1000px;
            height: 900px;
        }
    </style>

</head>

<body>
    <div class="g_Container">
        <div id="g_one"></div>

    </div>



    <script>
        Highcharts.chart('g_one', {
            chart: {
                plotBackgroundColor: null,
                // spacingLeft: 5,
                plotShadow: false,
                width: 536,
                height: 194,
                align: 'left',
                // x:-40,
                // y:75

            },
            title: {
                text: '',
            },
            credits: {
                enabled: false
            },

            exporting: {
                width: 536,
                height: 194,
                align: 'left',
                // x: -10 
            },

            plotOptions: {

                pie: {
                    slicedOffset: 2,
                    dataLabels: {
                        enabled: false,

                    },
                    startAngle: 100,
                    endAngle: 100,
                    showInLegend: true,

                }
            },
            series: [{
                type: 'pie',
                // name, percentage of data, color, slicing is need or not//
                keys: ['name', 'y', 'color', 'sliced'],
                size: 168,
                innerSize: 112,


                // give data name, percentage the data occupies, color to represent the data//
                data: [
                    ['Eateris', 10, '#22306b', true],
                    ['General payments', 10, '#000000', true],
                    ['Shoping', 10, '#9ca4be', true],
                    ['Travel and Transort', 10, '#e1808b', true],
                    ['Pastimes', 10, '#6d7272', true],
                    ['Family and home', 10, '#6298bf', true],
                    ['Utilities', 10, '#4a548e', true],
                    ['Health and beauty', 10, '#ab4735', true],
                    ['Groceries', 10, '#5e7ab9', true],
                    ['Groups and charity', 10, '#d0d1d0', true],
                ],
                showInLegend: true,
                dataLabels: {
                    enabled: false
                }
            }],
            legend: {

                align: 'right',
                verticalAlign: 'middle',
                horizontalAlign: 'left',
                height: 800,
                width: 300,
                itemWidth: 150,
                // itemHeight: 50,
                // itemWidth: 90,


                itemStyle: {
                    font: 'Sans Serif Regular',

                    fontSize: 8,
                    textOverflow: null,
                    //  paddingBottom: 5 
                },
                labelFormatter: function() {
                    console.log(this.name)
                    return '<span style="color: ' + this.color + '">' + this.name + '</span>';
                },
                itemHoverStyle: {
                    color: '#444'
                },
                symbolHeight: 10,
                itemMarginBottom: 5,




            }
        });
    </script>

</body>

</html>