Highchart中条形图内外的数据标签颜色可以不同

时间:2014-06-03 09:29:20

标签: javascript highcharts

我想知道如果文本不适合条形长度,条形图内的文本颜色(plotOptions.bar.dataLabels.color)可能会有所不同。例如: enter image description here

代码在这里:

$(function () {
$('#container').highcharts({
    chart: {
        type: 'bar',
        height: 700
    },
    xAxis: {
        categories: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
    },
    plotOptions: {
        bar: {
            stacking: 'normal',
            pointPadding: 0,
            groupPadding: 0.2,
            dataLabels: {
                enabled: true,
                color: 'black',
                align: "right",
                format: '{y} M',
                inside: false,
                style: {
                    fontWeight: 'bold'
                },
                verticalAlign: "middle"
            },
        }
    },

    series: [{
        data: [29.9, 71.5, 106.4, 129.2, 144.0, 176.0, 135.6, 148.5, 216.4, 194.1, 95.6, 2.33]
    }]
});

});

提前致谢

3 个答案:

答案 0 :(得分:5)

可能的解决方案是使用格式化程序。确定值是否低于某个级别,然后更改dataLabel颜色。例如:http://jsfiddle.net/Yrygy/176/

                formatter: function() {
                    var max = this.series.yAxis.max,
                        color =  this.y / max < 0.05 ? 'black' : 'white'; // 5% width
                    return '<span style="color: ' + color + '">' + this.y + ' M</span>';   
                },

您还可以将点的宽度与y值字符串的长度进行比较。

答案 1 :(得分:2)

我使用&#34; isInside&#34;像这样的价值:

&#13;
&#13;
 series: [{
   name: 'Percentage',
   data: this.calculateChartSeries(),
   dataLabels: {
     enabled: true,
     rotation: 0,
     align: 'right',
     borderWidth: 1,
     formatter: function() {
       if (this.point.isInside == true) {
         return '<span style="color: white">' + this.y + '%</span>';
       } else {
         return '<span style="color: black">' + this.y + '%</span>';
       }
     }
   }
 }]
&#13;
 
&#13;
&#13;
&#13;

但如果这对你不起作用,可以使用&#34; this.point.shapeArgs.height&#34;并检查该高度是否大于文本的长度。

答案 2 :(得分:2)

您可以将颜色设置为contrast,并且颜色会根据dataLabel是位于条形图的内部还是外部而变化。

style: {
    color: 'contrast'
}