LoginSignup
6
3

More than 5 years have passed since last update.

Google Chart Toolsで複数グラフを同時にコントロールする(異なるデータを用いるver)

Posted at

はじめに

前回と同じくGoogle Chart Toolsを使ってグラフを描いていきます。

前回との違いは、前回はチャートに表示しているデータが同じものだったのに対し、チャートごとに異なるデータを用いている点です。

今回の完成形

controls_sample2.png

実際の動きは JSFiddle で確認できます。

コードの中身

html
<script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
<div id="dashboard_div">
  <div id="chart1_div"></div>
  <div id="chart2_div"></div>
  <div id="chart3_div"></div>
  <div id="filter_div"></div>
</div>
javascript
google.charts.load('current', {packages: ['corechart', 'controls', 'table']});
google.charts.setOnLoadCallback(controlsAndDashboards);

function controlsAndDashboards() {

  var data = new google.visualization.DataTable();
  data.addColumn('date', '');
  data.addColumn('number', 'Dogs');
  data.addColumn('number', 'Cats');
  data.addColumn('number', 'Rabbits');

  function getRandomInt(min, max) {
    return Math.floor( Math.random() * (max - min + 1) ) + min;
  }

  for (var day = 1; day < 30; ++day) {
    var date = new Date(2015, 0 ,day);
    data.addRow([
      date,
      getRandomInt(0, 200),
      getRandomInt(0, 200),
      getRandomInt(0, 200)
    ]);
  }


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


  var chartRangeFilter = new google.visualization.ControlWrapper({
    controlType: 'ChartRangeFilter',
    containerId: 'filter_div',
    options: {
      filterColumnIndex: 0,
      ui: {
        chartType: 'ComboChart',
        chartOptions: {
          colors: [
            'rgb(255, 99, 132)',
            'rgb(54, 162, 235)',
            'rgb(255, 206, 86)'
          ],
          height: 70
        }
      }
    }
  });


  var dogs = new google.visualization.ChartWrapper({
    chartType: 'AreaChart',
    containerId: 'chart1_div',
    options: {
      height: 80,
      hAxis: {
        textPosition: 'none'
      },
      vAxis: {
        title: 'dogs'
      },
      colors: ['rgb(255, 99, 132)'],
      tooltip: {
        trigger: 'selection'
      },
      axisTitlesPosition: 'in'
    },
    view: {
      columns: [0, 1]
    }
  });


  var cats = new google.visualization.ChartWrapper({
    chartType: 'AreaChart',
    containerId: 'chart2_div',
    options: {
      height: 80,
      hAxis: {
        textPosition: 'none'
      },
      vAxis: {
        title: 'cats'
      },
      colors: ['rgb(54, 162, 235)'],
      tooltip: {
        trigger: 'selection'
      },
      axisTitlesPosition: 'in'
    },
    view: {
      columns: [0, 2]
    }
  });


  var rabbits = new google.visualization.ChartWrapper({
    chartType: 'AreaChart',
    containerId: 'chart3_div',
    options: {
      height: 80,
      vAxis: {
        title: 'rabbits'
      },
      colors: ['rgb(255, 206, 86)'],
      tooltip: {
        trigger: 'selection'
      },
      axisTitlesPosition: 'in'
    },
    view: {
      columns: [0, 3]
    }
  }); 

  dashboard.bind(chartRangeFilter, [dogs, cats, rabbits]);

  dashboard.draw(data);

}

異なるデータでチャート表示する際のポイント

それぞれのChartWrapper

var rabbits = new google.visualization.ChartWrapper({
  chartType: 'AreaChart',
    // 中略  //
  view: {
    columns: [0, 3]
  }

viewの設定を入れることです。
データ自体はDashboardから受け取るので、チャートごとに表示するデータをChartWrapperで選択する必要があります。

最後に

駆け足の連続投稿になりましたが、複数グラフをコントロールする場合って、別々のデータからチャートを作成してみることが多い気がします。。

6
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
3