当前位置: 首页 > 面试题库 >

如何为Google折线图/ Google折线图图例操作编写自己的自定义图例

柴默
2023-03-14
问题内容

我正在使用Google Visualization为我的应用程序创建折线图。我有以下要求:

  1. 处理图例事件(例如doubleClick,我已通过某种方式解决了该事件)
  2. 将图例两行包装以避免分页(大多数imp和必填项)

问题答案:

示例:构建自定义图例,该图例与数据和图表同步…

google.charts.load('44', {

  callback: drawChart,

  packages: ['controls', 'corechart']

});



function drawChart() {

  // adapted from a previous example

  var colorPallette = ['#273746','#707B7C','#dc7633','#f1c40f','#1e8449','#2874a6','#6c3483','#922b21'];



  var data = new google.visualization.DataTable();

  data.addColumn('date', 'X');

  data.addColumn('number', 'Y1');

  data.addColumn('number', 'Y2');



  data.addRow([new Date(2016,  0, 1),   1, 123]);

  data.addRow([new Date(2016,  1, 1),   6,  42]);

  data.addRow([new Date(2016,  2, 1),   4,  49]);

  data.addRow([new Date(2016,  3, 1),  23, 486]);

  data.addRow([new Date(2016,  4, 1),  89, 476]);

  data.addRow([new Date(2016,  5, 1),  46, 444]);

  data.addRow([new Date(2016,  6, 1), 178, 442]);

  data.addRow([new Date(2016,  7, 1),  12, 274]);

  data.addRow([new Date(2016,  8, 1), 123, 934]);

  data.addRow([new Date(2016,  9, 1), 144, 145]);

  data.addRow([new Date(2016, 10, 1), 135, 946]);

  data.addRow([new Date(2016, 11, 1), 178, 747]);



  // use view to add various columns for example purposes

  var view = new google.visualization.DataView(data);

  view.setColumns([0, 1, 2,

    {

      calc: function (data, row) {

        return data.getValue(row, 1) + data.getValue(row, 2);

      },

      type: 'number',

      label: 'Y3'

    },

    {

      calc: function (data, row) {

        return data.getValue(row, 2) - data.getValue(row, 1);

      },

      type: 'number',

      label: 'Y4'

    },

    {

      calc: function (data, row) {

        return data.getValue(row, 1) * 2;

      },

      type: 'number',

      label: 'Y5'

    },

    {

      calc: function (data, row) {

        return data.getValue(row, 2) * 3;

      },

      type: 'number',

      label: 'Y6'

    },

    {

      calc: function (data, row) {

        return data.getValue(row, 1) * 1.5;

      },

      type: 'number',

      label: 'Y7'

    },

    {

      calc: function (data, row) {

        return data.getValue(row, 1) * 1.5;

      },

      type: 'number',

      label: 'Y8'

    }

  ]);



  var control = new google.visualization.ControlWrapper({

    controlType: 'DateRangeFilter',

    containerId: 'control_div',

    options: {

      filterColumnIndex: 0

    }

  });



  var chart = new google.visualization.ChartWrapper({

    chartType: 'LineChart',

    containerId: 'chart_div',

    options: {

      chartArea: {

        width: '80%'

      },

      // add colors for legend mapping

      colors: colorPallette,

      hAxis: {

        format: 'MMM',

        slantedText: false,

        maxAlternation: 1

      },

      legend: 'none',

      width: 320

    }

  });



  // add legend marker

  function addLegendMarker(markerProps) {

    var legendMarker = document.getElementById('template-legend-marker').innerHTML;

    for (var handle in markerProps) {

      if (markerProps.hasOwnProperty(handle)) {

        legendMarker = legendMarker.replace('{{' + handle + '}}', markerProps[handle]);

      }

    }

    document.getElementById('legend_div').insertAdjacentHTML('beforeEnd', legendMarker);

  }



  // chart ready event

  google.visualization.events.addListener(chart, 'ready', function () {

    var legend = document.getElementById('legend_div');



    // colors from chart

    var colorPallette = chart.getOption('colors');



    // clear previous legend

    legend.innerHTML = '';



    // add legend marker for each Y axis column - skip X axis --> i = 1

    for (var i = 1; i < chart.getDataTable().getNumberOfColumns(); i++) {

      var markerProps = {};

      markerProps.index = i;

      markerProps.color = colorPallette[i - 1];

      markerProps.label = chart.getDataTable().getColumnLabel(i);

      addLegendMarker(markerProps);

    }



    // add click event to each legend marker

    var markers = legend.getElementsByTagName('DIV');

    Array.prototype.forEach.call(markers, function(marker) {

      marker.addEventListener('click', function (e) {

        var marker = e.target || e.srcElement;

        if (marker.tagName.toUpperCase() !== 'DIV') {

          marker = marker.parentNode;

        }

        var columnIndex = parseInt(marker.getAttribute('data-columnIndex'));

        document.getElementById('message_div').innerHTML = 'legend marker clicked = ' + chart.getDataTable().getColumnLabel(columnIndex);

      }, false);

    });

  });



  var dash = new google.visualization.Dashboard(document.getElementById('dashboard'));

  dash.bind([control], [chart]);

  dash.draw(view);

}


#legend_div {

  text-align: center;

  width: 320px;

}



.legend-marker {

  display: inline-block;

  padding: 16px 4px 8px 4px;

}



.legend-marker-color {

  display: inline-block;

  height: 12px;

  width: 12px;

}


<script src="https://www.gstatic.com/charts/loader.js"></script>

<div id="dashboard">

  <div id="chart_div"></div>

  <div id="legend_div"></div>

  <br/>

  <div id="control_div"></div>

  <br/>

  <div id="message_div"></div>

</div>



<!-- template for building marker -->

<script id="template-legend-marker" type="text/html">

  <div class="legend-marker" data-columnIndex="{{index}}">

    <div class="legend-marker-color" style="background-color: {{color}}"></div>

    <span>{{label}}</span>

  </div>

</script>


 类似资料:
  • 我想定制剑道折线图如下: 我想在剑道折线图上显示右侧的堆积条形图。 有什么方法可以使用MVC来实现这一点吗

  • 折线图用于绘制基于折线的图表。在本节中,我们将讨论以下类型的基于折线的图表。 图表类型 描述 基本折线图 基本折线图 带点折线图 带点折线图 定制背景色折线图 带有自定义背景颜色的图表。 定制线条颜色折线图 带有自定义线条颜色的图表。 定制轴和刻度标签折线图 带有自定义轴和刻度标签的图表。 带十字准线折线图 折线图在选择的数据点处显示十字准线。 定制线条样式折线图 带有自定义线条颜色的图表。 带曲

  • 我正在尝试增加我的折线图的线条粗细,使用React-Google-Charts实现。我已经看过了文档,但任何与线条粗细有关的东西都不起作用。我如何增加线条的粗细,并为线条提供不同的颜色。下面是我的实现和增加线条粗细的方法 对行没有执行任何操作。

  • 基本折线图 <template> <ve-line :data="chartData" :settings="chartSettings"></ve-line> </template> <script> export default { data () { this.chartSettings = {} return { chartData: { columns: ['日期',

  • 实时显示传感器数据。 用法 Your browser does not support the video tag. 案例:数据变化趋势 功能:显示数字改变的规律

  • 本文向大家介绍Android自定义控件实现折线图,包括了Android自定义控件实现折线图的使用技巧和注意事项,需要的朋友参考一下 本文实例实现一个如下图所示的Android折线图,供大家参考,具体内容如下 首先是控件绘图区域的划分,控件左边取一小部分(控件总宽度的八分之一)绘制表头,右边剩余的部分绘制表格 确定表格的行列数,首先绘制一个三行八列的网格,设置好行列的坐标后开始绘制 网格绘制完成后,