试图在HighStock中设置最小高度

时间:2013-03-18 15:52:20

标签: highcharts highstock

enter image description here我们正在制定一个项目,用于绘制两个国家/地区的销售额。挑战在于,由于我们的原型专注于美国,因此美国的销售总是使所有其他国家相形见绌。我们想要做的是为任何小于0的条设置最小高度,以便用户能够看到所有条形图并知道鼠标悬停在悬停状态上的计数。

我附上了一张图片,展示了美国销售规模如何使得右边国家的销售情况看起来像是0.在大多数情况下,只有美国出现但我们从未在底部展示过一个国家,除非至少有一次销售。

无论如何要定义最小高度,以便始终存在一些条形图?我们尝试添加一个边框,但是在相对于大条形图的销售数量很小的情况下,这种情况不起作用。

谢谢!

3 个答案:

答案 0 :(得分:25)

是的,您可以使用minPointLength:http://api.highcharts.com/highstock#plotOptions.column.minPointLength

除非这些数据的普通观众习惯于使用对数标度数据,否则以这种方式进行扩展并不是一个好主意。人们将按照它们应该比较条形的长度,并且会对数据产生完全不切实际的印象。

1像素和0像素之间的差异足以表明存在一个值,但在大多数情况下,不足以以任何有意义的方式扭曲数据。

答案 1 :(得分:2)

您可以考虑使用对数刻度:

http://www.highcharts.com/demo/line-log-axis

yAxis: {
    type: 'logarithmic'
},

即使一个条形比其他条形条高几个数量级,也可以显示不同的高度。

如果数据真的太小,以至于在您最初绘制时无法看到数据,那么其他任何内容都会使您的数据出现偏差。

答案 2 :(得分:1)

我像下面这样解决了这个问题

 events: {
        load: function(event) {
        // Following code is added to make tiny stack visible
            var chart = this;
            var totalValue = 82870; // Sum of all stacks
            var minimumPercentageValue = 0.8;

            this.series.forEach(function(series) {
                series.points.forEach(function(point) {
                    var valueInPercentage = (point.y * 100) / totalValue;
                    if (valueInPercentage < minimumPercentageValue) {
                        point.update({
                            y: ((minimumPercentageValue+valueInPercentage)*totalValue)/100,
                            realValue: point.y
                        }, false);
                    }
                });
            });

            this.redraw();
        }
    }

var chart = Highcharts.chart('chart-container', {
    credits: false,
    chart: {
        type: 'bar',
        animation:false,
        height:200,
        events: {
            load: function(event) {
            // Following code is added to make tiny stack visible
                var chart = this;
                var totalValue = 82870; // Sum of all stacks
                var minimumPercentageValue = 0.8;

                this.series.forEach(function(series) {
                    series.points.forEach(function(point) {
                        var valueInPercentage = (point.y * 100) / totalValue;
                        if (valueInPercentage < minimumPercentageValue) {
                            point.update({
                                y: ((minimumPercentageValue+valueInPercentage)*totalValue)/100,
                                realValue: point.y
                            }, false);
                        }
                    });
                });

                this.redraw();
            }
        }
    },
    title:{
        text:"Shifts"
    },
    xAxis: {
        visible:false,
        endOnTick:false,
        categories: ['Shifts'],
    },
    yAxis: {
        endOnTick:false,
        visible:false,
        max: 82870,
    },
    legend: {
    		reversed: true,
        align: 'left',
        padding:0,
        itemPaddingBottom:15,
        itemMarginBottom:5,
        symbolRadius:0,
        verticalAlign: 'bottom',
        floating: true,
    	  itemMarginBottom:5,
        useHTML: true,
        labelFormatter: function (params) {
            return '<div><div>'+this.name+'</div><div style="font-weight:normal">'+this.userOptions.start_time+'</div><div style="font-weight:normal">'+this.userOptions.end_time+'</div></div>';
        }
    },
    plotOptions: {
        series: {
            stacking: 'normal',
            pointWidth: 50,
            pointPlacement:'on',
            states: {
              hover: {
                enabled: false
              },
              inactive: {
                opacity: 1
              },
              marker: {
                enabled: false
              }
            }
        },
    },
    series: [{"name":"Shift 1","start_time":"12\/06\/2019 05:46:47 PM","end_time":"13\/06\/2019 02:47:46 PM","data":[75659]},{"name":"Break","start_time":"03\/06\/2019 03:42:11 PM","end_time":"03\/06\/2019 03:42:31 PM","data":[20]},{"name":"Shift 2","start_time":"03\/06\/2019 03:41:39 PM","end_time":"03\/06\/2019 03:42:11 PM","data":[32]},{"name":"Shift 3","start_time":"29\/05\/2019 08:17:32 PM","end_time":"29\/05\/2019 10:14:43 PM","data":[7031]},{"name":"Shift 4","start_time":"29\/05\/2019 08:16:32 PM","end_time":"29\/05\/2019 08:17:32 PM","data":[60]},{"name":"Shift 5","start_time":"29\/05\/2019 08:15:24 PM","end_time":"29\/05\/2019 08:16:32 PM","data":[68]}],
});
<script src="https://code.highcharts.com/highcharts.js"></script>
<div id="chart-container" style="height:400px; width:100%" ></div>