Google Chart Toolsでグラフに垂直線を描画する

# はじめに
[前回](http://qiita.com/hippocampus-coronatus/items/f55be5f7977b777e4876)と同じくGoogle Chart Toolsを使ってグラフを描いていきます。

今回は[LineChart](https://developers.google.com/chart/interactive/docs/gallery/linechart)とグラフオプションの中から[Crosshairs](https://developers.google.com/chart/interactive/docs/crosshairs)を用いて線グラフに垂直線*1を描きます。
*1株式チャートなどでバーディカルラインと呼ばれているものです。

# 今回の完成形
<img width="935" alt="closshair_sample.png" src="https://qiita-image-store.s3.amazonaws.com/0/118801/b4eb2fe7-1d85-d25d-d4ef-3c3604a90a4f.png">

今回もサンプルデータは公式からお借りしました。
実際の動きは [JSFiddle](https://jsfiddle.net/hippocampuscoronatus/pLrtmeq0/) で確認できます。

# コードの中身
```html:html
<script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
<div id="chart_div"></div>
```

```javascript:javascript
google.charts.load('current', {packages: ['corechart', 'line']});
google.charts.setOnLoadCallback(drawCrosshairs);

function drawCrosshairs() {
  var data = new google.visualization.DataTable();
  data.addColumn('number', 'X');
  data.addColumn('number', 'Dogs');
  data.addColumn('number', 'Cats');
  data.addRows([
      [0, 0, 0], [1, 10, 5], [2, 23, 15], [3, 17, 9], [4, 18, 10], [5, 9, 5],
      [6, 11, 3], [7, 27, 19], [8, 33, 25], [9, 40, 32], [10, 32, 24], 
      [11, 35, 27], [12, 30, 22], [13, 40, 32], [14, 42, 34], [15, 47, 39],
      [16, 44, 36], [17, 48, 40], [18, 52, 44], [19, 54, 46], [20, 42, 34],
      [21, 55, 47], [22, 56, 48], [23, 57, 49], [24, 60, 52], [25, 50, 42],
      [26, 52, 44], [27, 51, 43], [28, 49, 41], [29, 53, 45], [30, 55, 47],
      [31, 60, 52], [32, 61, 53], [33, 59, 51], [34, 62, 54], [35, 65, 57],
      [36, 62, 54], [37, 58, 50], [38, 55, 47], [39, 61, 53], [40, 64, 56],
      [41, 65, 57], [42, 63, 55], [43, 66, 58], [44, 67, 59], [45, 69, 61],
      [46, 69, 61], [47, 70, 62], [48, 72, 64], [49, 68, 60], [50, 66, 58],
      [51, 65, 57], [52, 67, 59], [53, 70, 62], [54, 71, 63], [55, 72, 64],
      [56, 73, 65], [57, 75, 67], [58, 70, 62], [59, 68, 60], [60, 64, 56],
      [61, 60, 52], [62, 65, 57], [63, 67, 59], [64, 68, 60], [65, 69, 61],
      [66, 70, 62], [67, 72, 64], [68, 75, 67], [69, 80, 72]
  ]);

  var options = {
    hAxis: {
      title: 'Time'
    },
    vAxis: {
      title: 'Popularity'
    },
    series: {
      0: { color: 'navy' },
      1: { color: 'purple' }
    },
    curveType: 'function',
    crosshair: {
      trigger: 'both',
      focused: {
        color: 'green',
        orientation: 'vertical'
      },
      selected: {
        color: 'aqua',
        opacity: 0.3,
        orientation: 'horizontal'
      }
    },
    tooltip: {
      trigger: 'both'
    },
    focusTarget: 'category'
  };

  var chart = new google.visualization.LineChart(document.getElementById('chart_div'));

  chart.draw(data, options);
}
```

## Optionsについて

　hAxis, vAxis, series, curveTypeの説明は省略させていただきます。

### crosshair
**trigger**にはフォーカスのときも選択時も垂直線を引くように設定しています。

```javascript
trigger: 'both',
```

**focused**にはフォーカス時の色と線のタイプを設定しています。

```javascript
color: 'green',
orientation: 'vertical'
```

**selected**には選択時の色と透明度と線のタイプを設定しています。

```javascript
color: 'aqua',
opacity: 0.3,
orientation: 'horizontal'
```

### tooltip
**trigger**にはtooltipを表示するタイミングを設定しています。

※公式には'focus'か'none'か'selection'しかないけど'both'も設定できた。
'both'はフォーカス時と選択時の両方を指定しています。

```javascript
trigger: 'both'
```

### focusTarget
今回のグラフが複数ラインなのでフォーカスすると、複数のデータポイントに焦点を当て、ツールチップもすべてのカテゴリを表示するよう設定しています。

```javascript
focusTarget: 'category'
```

# 最後に

今回はグラフに垂直線の描画を行いました。
サンプルのためフォーカス時と選択時でcrosshairの描画方向がかわるようになっていますが、実際使うときは同じタイプを指定するのが一般的かなと思います。