代码之家  ›  专栏  ›  技术社区  ›  Ashu

海图:在网格线后显示一些数据

  •  1
  • Ashu  · 技术社区  · 8 年前

    我有一张用海图做的折线图。

    只有在Y轴上只有一定数量的值,并且在网格结束后必须显示一些数据。

    预期结果: enter image description here

    当前实施:

    Highcharts.chart('container', {
      title: {
        text: 'Data Table Example'
      },
    
      chart: {
        borderWidth: 1,
        borderColor: '#ccc',
        spacingBottom: 30
      },
    
      xAxis: {
        categories: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
      },
      series: [{
        data: [0, 2, 1, 3, 2, 2, 1, 0, 2],
      }],
      exporting: {
        showTable: true
      }
    
    })
    <script src="https://code.highcharts.com/highcharts.js"></script>
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
    <div class="row">
      <div id="container" class="col-sm-8"></div>
      <div id="grid" class="col-sm-4">
    
    
        <table class="table">
          <thead>
            <tr>
              <th>Count</th>
              <th>%</th>
              <th>Comments</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td>0</td>
              <td>0</td>
              <td>NA</td>
            </tr>
            <tr>
              <td>1</td>
              <td>11</td>
              <td>A</td>
            </tr>
            <tr>
              <td>4</td>
              <td>44</td>
              <td>B</td>
            </tr>
            <tr>
              <td>2</td>
              <td>22</td>
              <td>B</td>
            </tr>
            <tr>
              <td>2</td>
              <td>22</td>
              <td>C</td>
            </tr>
          </tbody>
        </table>
    
    
    
      </div>
    </div>

    我们需要确保它对所有不同的设备都保持响应。我创建的表对于某些特定的分辨率表现良好。

    1 回复  |  直到 8 年前
        1
  •  0
  •   ppotaczek    8 年前

    为了始终具有网格线和表线的相同位置,可以根据YxIk刻度位置计算每个表行的高度。

    chart: {
        events: {
            render: function() {
                var chart = this,
                    ticks = chart.yAxis[0].ticks,
                    rows = $(".table").find("tr"),
                    heights = [];
    
                Highcharts.objectEach(ticks, function(tick, i) {
                    heights.push(tick.gridLine.d.split(' ')[2]);
                });
    
                heights.reverse();
    
                for (var i = 0; i < rows.length; i++) {
                    if (i === rows.length - 1) {
                        $(rows[i]).css('height', chart.chartHeight - heights[heights.length - 1])
                    } else if (i > 0) {
                        $(rows[i]).css('height', heights[i] - heights[i - 1])
                    } else {
                        $(rows[i]).css('height', heights[i])
                    }
    
                }
            }
        }
    }
    

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