【问题标题】:Auto chart height自动图表高度
【发布时间】:2020-07-07 01:37:30
【问题描述】:

默认 highstock 图表的高度 = 400px。

如何根据图表轴及其大小为自动大小设置高度图表?

参见下面的示例,导航栏位于音量面板上方。

http://jsfiddle.net/BYNsJ/

我知道我可以设置 div 的高度,但我有一个解决方案,可以在图表中动态插入/删除轴/系列,并且会是一个很好的自动高度图表。

该示例与来自 Highchart 站点的 Candlestick/Volume 演示相同,但​​ div 容器中没有 height 属性。

    // 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
            }
        }]
    });
    });
});

问候。

【问题讨论】:

标签: highcharts highstock


【解决方案1】:

这里是一个例子,它是根据屏幕调整图表大小。 http://jsfiddle.net/davide_vallicella/LuxFd/2/

只是不要在 HighCharts 中设置 height 属性,只要您在图表的包含元素上设置高度,它就会为您动态处理它。如果位置是绝对的,它可以是一个固定的数字,甚至是一个百分比。

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

默认情况下,高度是根据包含元素的偏移高度计算的

在此处查找示例:- http://jsfiddle.net/wkkAd/149/

#container {
    width:100%;
    height:100%;
    position:absolute;
}

【讨论】:

    【解决方案2】:

    嘿,我使用的是 angular 2+ 和 highchart/highstock v.5,我认为它也可以在 JS 或 jQuery 中使用,这是一个简单的解决方案

    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%'
         }]
    } 
    

    它的工作,一个简单的。删除图表高度,在 '%' 中为 yAxis 添加高度。

    【讨论】:

    • 使用 renderTo 使它对我有用,这是 IMO 中最优雅的解决方案
    【解决方案3】:

    Highcharts不支持动态高度,可以通过$(window).resize事件实现:

    $(window).resize(function() 
    {    
        chart.setSize(
           $(document).width(), 
           $(document).height()/2,
           false
        );   
    });
    

    见演示小提琴here。

    【讨论】:

    【解决方案4】:

    您可以使用chart.update方法动态设置chart.height。

    http://api.highcharts.com/highcharts/Chart.update

    function resizeChartFromValues (chart) {
      const pixelsForValue = 10
      const axis = chart.yAxis[0]
      chart.update({ chart: { height: (axis.max - axis.min) * pixelsForValue } })
    }
    
    const options = {
      chart: {
        events: {
          load () {resizeChartFromValues(this)}
        }
      },
      series: [{
        data: [30, 70, 100],
      }]
    }
    
    const chart = Highcharts.chart('container', options)
    
    setTimeout(() => {
      chart.series[0].setData([10, 20, 30])
      resizeChartFromValues(chart)
    }, 1000)
    

    现场示例:https://jsfiddle.net/a97fgsmc/

    【讨论】:

      【解决方案5】:

      我遇到了同样的问题,我用以下方法解决了它:

      <div id="container" style="width: 100%; height: 100%; position:absolute"></div>
      

      图表没有特殊选项。即使我调整它的大小,该图表也非常适合浏览器。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-09-04
        • 2017-02-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多