HighChart Legends 克服图表

Posted

技术标签:

【中文标题】HighChart Legends 克服图表【英文标题】:HighChart Legends Overcome on charts 【发布时间】:2019-09-28 00:54:42 【问题描述】:

如果图表中有更多的图例值。然后默认它在图表上克服,如下图所示。我们可以用滚动条而不是分页来处理这个问题吗?

【问题讨论】:

嗨@K.Satya,请在一些在线代码编辑器中重现您的问题。在以下示例中,一切正常:jsfiddle.net/BlackLabel/3c5k2g7m 感谢@ppotaczek 的快速回复。它工作正常。但是在分页滚动条的地方可以吗? 【参考方案1】:

不支持Highcharts图例中的滚动条,但您可以创建自定义图例:

var chart = new Highcharts.Chart(

  chart: 
    renderTo: 'container',
    marginRight: 150 // make room for the legend
  ,

  xAxis: 
    categories: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
  ,

  legend: 
    enabled: false
  ,

  series: (function() 
    var series = [];
    for (var i = 0; i < 20; i++) 
      var data = [];
      for (var j = 0; j < 12; j++) 
        data.push(Math.random());
      
      series.push(
        name: 'Location ' + (i + 1),
        data: data
      );
    
    return series;
  )()
, function(chart) 
  var options = chart.options.legend;
  /**
   * What happens when the user clicks the legend item
   */
  function clickItem(series, $legendItem, $line) 
    series.setVisible();
    $legendItem.css(
      options[series.visible ? 'itemStyle' : 'itemHiddenStyle']
    );
    $line.css(
      borderTop: '2px solid ' + (series.visible ? series.color :
        options.itemHiddenStyle.color)
    );
  
  // Create the legend box
  var $legend = $('<div>')
    .css(
      width: 110,
      maxHeight: 210,
      padding: 10,
      position: 'absolute',
      overflow: 'auto',
      right: 10,
      top: 40,
      borderColor: options.borderColor,
      borderWidth: options.borderWidth,
      borderStyle: 'solid',
      borderRadius: options.borderRadius
    )
    .appendTo(chart.container);


  $.each(chart.series, function(i, series) 
    // crete the legend item            
    var $legendItem = $('<div>')
      .css(
        position: 'relative',
        marginLeft: 20
      )
      .css(options[series.visible ? 'itemStyle' : 'itemHiddenStyle'])
      .html(series.name)
      .appendTo($legend);

    // create the line with each series color
    var $line = $('<div>')
      .css(
        width: 16,
        position: 'absolute',
        left: -20,
        top: 8,
        borderTop: '2px solid ' + (series.visible ? series.color :
          options.itemHiddenStyle.color)
      )
      .appendTo($legendItem);

    // click handler 
    $legendItem.click(function() 
      clickItem(series, $legendItem, $line);
    );

  );
);

现场演示: http://jsfiddle.net/BlackLabel/phvz9uqe/

用户语音线程: https://highcharts.uservoice.com/forums/55896-highcharts-javascript-api/suggestions/1256991-scrolling-legends

【讨论】:

以上是关于HighChart Legends 克服图表的主要内容,如果未能解决你的问题,请参考以下文章

图表库 - Highchart / Echart

highchart图表动态高度

自动化邮件报告平台-邮件发送highchart图表

Highchart基础教程-图表配置

Highchart基础教程-图表的主要组成

教你做一个简单的highchart.js图表