Highchart图例已剪切文本

时间:2016-01-12 09:30:27

标签: javascript highcharts

我使用Highcharts制作热图,我在文字剪报中面临一些问题。

当我在colorAxis上添加标签时,文字会被剪裁:

colorAxis: {
    min: 0,
    minColor: '#FFFFFF',
    maxColor: Highcharts.getOptions().colors[0],
    labels: {
        format: '{value} test test test'
    },
}

Highchart heat map

我只添加了 colorAxis.labels.format 属性。

在此处查看我的示例: http://jsfiddle.net/dennismadsen/7sp8ddpq/1/

它基于/分享了这个官方Highchart示例: http://jsfiddle.net/highcharts/4aqhB/

2 个答案:

答案 0 :(得分:1)

HighCharts在图例布局中确实有它的怪癖。你必须明确设置宽度,即

    legend: {
        ...
        width: 140,
        ...
    },

答案 1 :(得分:1)

基于TorsteinHonsi在GitHub上发布的帖子,找到了一种让它变得动态的方法。代码基本上测量标签的宽度并重绘图表。看看它是否符合您的需求。

$(function () {

    var leg = 'Whatever';

    var aChart = new Highcharts.Chart({
        chart: {
            type: 'heatmap',
            marginTop: 40,
            marginBottom: 40,
            renderTo: 'container'
        },
        title: {
            text: 'Sales per employee per weekday'
        },
        xAxis: {
            categories: ['Alexander', 'Marie', 'Maximilian', 'Sophia', 'Lukas', 'Maria', 'Leon', 'Anna', 'Tim', 'Laura']
        },
        yAxis: {
            categories: ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday'],
            title: null
        },
        colorAxis: {
            min: 0,
            minColor: '#FFFFFF',
            maxColor: Highcharts.getOptions().colors[0],
            labels: {
                format: '{value} ' + leg,
                style: {
                    textOverflow: "clip",
                    overflow: "visible",
                    whiteSpace: "nowrap"
                }
            },
        },
        legend: {
            align: 'right',
            layout: 'vertical',
            margin: 0,
            verticalAlign: 'top',
            y: 25,
            symbolHeight: 320
        },
        tooltip: {
            formatter: function () {
                return '<b>' + this.series.xAxis.categories[this.point.x] + '</b> sold <br><b>' +
                        this.point.value + '</b> items on <br><b>' + this.series.yAxis.categories[this.point.y] + '</b>';
            }
        },
        series: [{
                name: 'Sales per employee',
                borderWidth: 1,
                data: [[0, 0, 10], [0, 1, 19], [0, 2, 8], [0, 3, 24], [0, 4, 67], [1, 0, 92], [1, 1, 58], [1, 2, 78], [1, 3, 117], [1, 4, 48], [2, 0, 35], [2, 1, 15], [2, 2, 123], [2, 3, 64], [2, 4, 52], [3, 0, 72], [3, 1, 132], [3, 2, 114], [3, 3, 19], [3, 4, 16], [4, 0, 38], [4, 1, 5], [4, 2, 8], [4, 3, 117], [4, 4, 115], [5, 0, 88], [5, 1, 32], [5, 2, 12], [5, 3, 6], [5, 4, 120], [6, 0, 13], [6, 1, 44], [6, 2, 88], [6, 3, 98], [6, 4, 96], [7, 0, 31], [7, 1, 1], [7, 2, 82], [7, 3, 32], [7, 4, 30], [8, 0, 85], [8, 1, 97], [8, 2, 123], [8, 3, 64], [8, 4, 84], [9, 0, 47], [9, 1, 114], [9, 2, 31], [9, 3, 48], [9, 4, 91]],
                dataLabels: {
                    enabled: true,
                    color: 'black',
                    style: {
                        textShadow: 'none'
                    }
                }
            }]

    });

    Highcharts.Legend.prototype.update = function (options) {
        this.options = Highcharts.merge(this.options, options);
        this.chart.isDirtyLegend = true;
        this.chart.isDirtyBox = true;
        this.chart.redraw();
    };

    aChart.legend.update({
        width: 50 + $('.highcharts-axis-labels tspan').outerWidth()
    });
});