Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Auto chart height

The default highstock chart has height = 400px.

How can height chart be set for auto size based on chart axis and its sizes ?

See the example bellow, the navigation bar is over the volume panel.

http://jsfiddle.net/BYNsJ/

I know that I can set the height for the div but I have a solution that insert/remove axis/series dynamically in the chart and would be nice an auto height chart.

The example is the same Candlestick/Volume demo from Highchart site, but without height property in the div container.

    // split the data set into ohlc and volume
    var ohlc = [],
        volume = [],
        dataLength = data.length;

    for (i = 0; i < dataLength; i++) {
        ohlc.push([
            data[i][0], // the date
            data[i][1], // open
            data[i][2], // high
            data[i][3], // low
            data[i][4] // close
        ]);

        volume.push([
            data[i][0], // the date
            data[i][5] // the volume
        ])
    }

    // set the allowed units for data grouping
    var groupingUnits = [[
        'week',                         // unit name
        [1]                             // allowed multiples
    ], [
        'month',
        [1, 2, 3, 4, 6]
    ]];

    // create the chart
    $('#container').highcharts('StockChart', {

        rangeSelector: {
            selected: 1
        },

        title: {
            text: 'AAPL Historical'
        },

        yAxis: [{
            title: {
                text: 'OHLC'
            },
            height: 200,
            lineWidth: 2
        }, {
            title: {
                text: 'Volume'
            },
            top: 300,
            height: 100,
            offset: 0,
            lineWidth: 2
        }],

        series: [{
            type: 'candlestick',
            name: 'AAPL',
            data: ohlc,
            dataGrouping: {
                units: groupingUnits
            }
        }, {
            type: 'column',
            name: 'Volume',
            data: volume,
            yAxis: 1,
            dataGrouping: {
                units: groupingUnits
            }
        }]
    });
    });
});

Regards.

like image 680
Kleyson Rios Avatar asked Oct 05 '22 12:10

Kleyson Rios


2 Answers

here is one example which is resize chart according screen. http://jsfiddle.net/davide_vallicella/LuxFd/2/

Just don't set the height property in HighCharts and it will handle it dynamically for you so long as you set a height on the chart's containing element. It can be a fixed number or a even a percent if position is absolute.

http://api.highcharts.com/highcharts/chart.height

By default the height is calculated from the offset height of the containing element

find example here:- http://jsfiddle.net/wkkAd/149/

#container {
    width:100%;
    height:100%;
    position:absolute;
}
like image 131
Darshak Avatar answered Oct 11 '22 16:10

Darshak


hey I was using angular 2+ and highchart/highstock v.5, I think it will work in JS or jQuery also, here is a easy solution

HTML

<div id="container">
    <chart type="StockChart" [options]="stockValueOptions"></chart> 
</div>

CSS

#container{
   height: 90%;
} 

TS

 this.stockValueOptions = {
     chart: {
         renderTo: 'container'                    
     },
     yAxis: [{
        height: '60%'
     },{
        top: '65%',
        height: '35%'
     }]
} 

Its working, and a easy one. Remove chart height add height in '%' for the yAxis.

like image 34
Subhabrata Banerjee Avatar answered Oct 11 '22 16:10

Subhabrata Banerjee