24

私は Highcharts を使用していくつかの縦棒 (別名「縦棒グラフ」) を作成しています: highcharts.com/demo/column-basic

チャートに 30 本のバーがある場合もあれば、2 本しかない場合もあります。チャート内の 2 つの非常に幅の広いバーは、非常に奇妙に見えるため、バーの最大幅を設定する決定が下されました。そうすれば、2 つしかない場合、たとえば 50px よりも広くなることはありませんが、50 つある場合、Highcharts は適切と思われる方法でサイズを変更できます。

したがって、私の問題は、Highcharts には列の最大幅を明示的に設定する方法がないことです。誰かがそれに対する解決策を見つけましたか?

4

8 に答える 8

28

明らかに、この質問はこの機能が存在しなかったずっと前に尋ねられましたが、Highcharts 4.1.8 の時点では、次のplotOptions.column.maxPointWidth設定を使用して回避策なしでこれを行うことができます。

$('#container').highcharts({
    /* Other chart settings here... */
    plotOptions: {
        column: {
            /* Here is the setting to limit the maximum column width. */
            maxPointWidth: 50
        }
    }
    /* Other chart settings here... */
});

以下は、基本的な縦棒グラフの例の JSFiddle で、この動作を示すように変更されています。

http://jsfiddle.net/vu3dubhb/

この設定のドキュメントはこちら: http://api.highcharts.com/highcharts#plotOptions.column.maxPointWidth

于 2016-02-29T12:33:41.513 に答える
16

更新: Highcharts バージョン 4.1.8 の時点で、以下の Adam Goodwin の回答を参照してください。



何年もの間、列の最大幅を設定する唯一の方法は、JavaScript を介して動的に設定することでした。

基本的:

  1. 現在のバーの幅を確認します。
  2. 必要以上に大きい場合は、シリーズをリセットしpointWidthます。
  3. 強制的に再描画して、変更を表示します。

何かのようなもの:

var chart = new Highcharts.Chart ( { ... ...

//--- Enforce a Maximum bar width.
var MaximumBarWidth = 40; //-- Pixels.
var series          = chart.series[0];

if (series.data.length) {

    if (series.data[0].barW  >  MaximumBarWidth) {
        series.options.pointWidth = MaximumBarWidth;
        /*--- Force a redraw.  Note that redraw() will not 
            fire in this case!
            Hence we use something like setSize().
        */
        chart.setSize (400, 300);   
    }
}


jsFiddle でデモを参照してください。

于 2011-05-30T01:15:29.857 に答える
13

究極の解決策は、各ポイント、特に x 位置と幅をラップdrawPointsして上書きすることです。shaperArgs

(function(H) { 
    var each = H.each;
    H.wrap(H.seriesTypes.column.prototype, 'drawPoints', function(proceed) {
        var series = this;
        if(series.data.length > 0 ){
            var width = series.barW > series.options.maxPointWidth ? series.options.maxPointWidth : series.barW;
            each(this.data, function(point) {
                point.shapeArgs.x += (point.shapeArgs.width - width) / 2;
                point.shapeArgs.width = width;
            });
        }
        proceed.call(this);
    })
})(Highcharts)

使用する:

$('#container').highcharts({
    chart: {
      type: 'column'
    },
    series: [{
        maxPointWidth: 50,
        data: [ ... ]
    }]
});

ライブデモ: http://jsfiddle.net/83M3T/1/

于 2014-03-14T10:07:09.997 に答える
3

より良い方法が提案されています

http://highcharts.uservoice.com/forums/55896-general/suggestions/2079099-manually-set-the-column-width

このフィドルをチェックしてください

http://jsfiddle.net/gh/get/jquery/1.7.2/highslide-software/highcharts.com/tree/master/samples/highcharts/plotoptions/column-pointwidth-20/

追加するだけ

     series: {
                 pointWidth: 20
             }

あなたはオプションをプロットし、それだけです。:)乾杯を楽しんでください...

于 2012-09-03T05:13:02.703 に答える
1
function(chart){
        var series = chart.series[0];
        //--- Enforce a Maximum bar width
        if (series && series.data.length) {
            if (series.data[0].pointWidth  >  MaximumBarWidth) {
                for(var i=0;i< chart.series.length;i++)
                  chart.series[i].update({
                    pointWidth:MaximumBarWidth
                    });
            }
        }
    }

http://jsfiddle.net/pXZRV/40/

于 2015-01-02T07:32:28.553 に答える