3

私はこのような積み上げ棒グラフを持っています:http://jsfiddle.net/XFX5T/

負の値と正の値の合計をスタックラベルとして使用できるかどうかを知りたいのですが。

合計が正の場合、バーの上部にラベルを表示します。合計が負の場合は、バーの下部にラベルを表示します。

この例のブドウの列には、たとえばラベルとして40があります。

ドキュメントを確認しましたが、これにはデフォルトの構成設定がないようです。

stackLabels: {
   enabled: true,
   style: {
     fontWeight: 'bold',
     color: (Highcharts.theme && Highcharts.theme.textColor) || 'gray'
   }
 }
4

3 に答える 3

7

stackLabels フォーマッターで試すことができます。例えば:

stackLabels: {
  formatter: function(){
    var sum = 0;
    var series = this.axis.series;

    for (var i in series){
      sum+=series[i].yData[this.x];
    }
    if (sum < 0 && this.isNegative || sum >= 0 && !this.isNegative)
      return sum;
  }
...
}
于 2013-03-14T17:15:49.213 に答える
1

受け入れられた回答の欠点の 1 つは、グループ化されたスタックでは機能しないことです。これは、各グループのシリーズだけでなく、すべてのスタック シリーズの合計が得られるためです。

グループ化されたスタックで機能する関数を次に示します (きれいではありません)。

    function() {
        var stackItem = this;
        var allStacks = stackItem.axis.stacks;
        for (var key in allStacks) {
            if (allStacks[key][stackItem.x] == stackItem) {
                var oppositeKey = stackItem.isNegative ? key.slice(1) : '-' + key;
                var oppositeItem = allStacks[oppositeKey] && allStacks[oppositeKey][stackItem.x];
                if (oppositeItem === undefined) {
                    if (stackItem.total != 0.0) {
                        return Highcharts.numberFormat(stackItem.total, 0);
                    }
                } else {
                    var sum = stackItem.total + oppositeItem.total;
                    if (stackItem.isNegative ^ sum > 0) {
                        return Highcharts.numberFormat(sum, 0);
                    }
                }
            }
        }
    };

Nb 私はthisフォーマッタから渡しています。

これが実際の例です。

于 2014-01-08T17:24:22.450 に答える