5
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Angular.js+GoogleChartToolsでグラフ描画4(棒グラフ-縦方向 + 折れ線グラフ)

Posted at

Angular.js+GoogleChartToolsでグラフ描画3(棒グラフ-縦方向)で描画した棒グラフ-縦方向に折れ線グラフを重ねて表示します。

棒グラフに折れ線グラフを重ねる

折れ線グラフを棒グラフに重ねるには、typeを'ColumnChart'から'ComboChart'に変更し、折れ線グラフ用のデータを追加し、optionsにseriesTypeとseriesを追加します。 

app/scripts/controllers/main.js
'use strict';

angular.module('chartApp')
  .controller('MainCtrl', function ($scope) {
    $scope.testchart = createChart();
	function createChart() {
		var chart = {};
		chart.type = "ComboChart";
		chart.data = [
			['title', '値1', '値2', '値3', '値4', '値5'],
			['パターンA', 55, 60, 40, 18, 6],
			['パターンB', 45, 38, 50, 13, 9],
			['パターンC', 30, 45, 50, 10, 2],
			['パターンD', 20, 10, 30, 11, 3]
		];
		chart.options = {
			dataOpacity: 0.5,
			height: 500,
			isStacked: true,
			hAxis: {
				slantedText: true,
				viewWindowMode: 'pretty',
				textPosition:'out',
				title:'パターン'
			},
			vAxis: {
				textPosition:'out',
				title:''
			},
			seriesType: "bars",
			series:{
				3:{ type: 'line'},
				4:{ type: 'line'}
			}
		}
		return chart;
	}
  });

1411550069914screencapture.png

Y軸を2軸にして折れ線グラフを見やすくする

現状では棒グラフと折れ線グラフのY軸が共通になっていて折れ線グラフが見難いので、
棒グラフと折れ線グラフで異なるY軸を持つようにグラフを修正します。

  1. seriesのtargetAxisIndexを追加。
  2. vAxisを削除し、vAxesを追加。

※vAxesを追加しなくても折れ線グラフは見やすくなりますが、
棒グラフと折れ線グラフで異なるY軸を持つのがわかりやすいようにvAxesを追加しました。

app/scripts/controllers/main.js
'use strict';

angular.module('chartApp')
  .controller('MainCtrl', function ($scope) {
    $scope.testchart = createChart();
	function createChart() {
		var chart = {};
		chart.type = "ComboChart";
		chart.data = [
			['title', '値1', '値2', '値3', '値4', '値5'],
			['パターンA', 55, 60, 40, 18, 6],
			['パターンB', 45, 38, 50, 13, 9],
			['パターンC', 30, 45, 50, 10, 2],
			['パターンD', 20, 10, 30, 11, 3]
		];
		chart.options = {
			dataOpacity: 0.5,
			height: 500,
			isStacked: true,
			hAxis: {
				slantedText: true,
				viewWindowMode: 'pretty',
				textPosition:'out',
				title:'パターン'
			},
			vAxes:{
				0:{title:'Y軸1'},
				1:{title:'Y軸2'}
			},
			seriesType: "bars",
			series:{
				3:{ type: 'line', targetAxisIndex: 1},
				4:{ type: 'line', targetAxisIndex: 1}
			}
		}
		return chart;
	}
  });

1411551460238screencapture.png

棒グラフ-縦方向 + 折れ線グラフのoptions

optionsを指定することでグラフをカスタマイズすることが出来ます。

app/scripts/controllers/main.js
'use strict';

angular.module('chartApp')
  .controller('MainCtrl', function ($scope) {
    $scope.testchart = createChart();
	function createChart() {
		var chart = {};
		chart.type = "ComboChart";
		chart.data = [
			['title', '値1', '値2', '値3', '値4', '値5'],
			['パターンA', 55, 60, 40, 18, 6],
			['パターンB', 45, 38, 50, 13, 9],
			['パターンC', 30, 45, 50, 10, 2],
			['パターンD', 20, 10, 30, 11, 3]
		];
		chart.options = {
			dataOpacity: 0.5,
			height: 500,
			isStacked: true,
			aggregationTarget:'series',
			selectionMode:'multiple',
			hAxis: {
				slantedText: true,
				viewWindowMode: 'pretty',
				textPosition:'out',
				title:'パターン'
			},
			bar: {
				groupWidth: '30%'
			},
			vAxes:{
				0:{title:'Y軸1'},
				1:{title:'Y軸2', textStyle:{color:'green', bold:true}, gridlines:{count:4, color:'green'}}
			},
			crosshair: {
				trigger: 'both',
				orientation: 'both',
				color: 'red'
			},
			seriesType: "bars",
			series:{
				3:{ type: 'line', targetAxisIndex: 1, pointShape: "star", pointSize: 20, curveType:'function'},
				4:{ type: 'line', targetAxisIndex: 1, pointShape: "polygon", pointSize: 20}
			}
		}
		return chart;
	}
  });

1411612337306screencapture.png

| プロパティ | 型 | 説明 |
|:-----------|:------------|:------------|:------------|
| aggregationTarget | string | ??? |
| animation.duration | number | グラフの値が変更された際、グラフのアニメーションにかかる時間を指定します。 |
| animation.easing | string | グラフの値が変更された際、グラフのアニメーションのイージング関数を指定します。 有効な値は'linear'(一定速度), 'in'(アニメーション開始時がゆっくりで、その後スピードアップ), 'out'(アニメーション開始時が速くて、その後スピードダウン), 'inAndOut'(アニメーション開始時がゆっくりで、その後スピードアップし、その後スピードダウン) |
| annotations.boxStyle | object | ??? |
| annotations.highContrast | boolean | ??? |
| annotations.textStyle | object | ??? |
| areaOpacity | number | エリアチャートの透明度を指定します。 |
| axisTitlesPosition | string | 軸タイトルの配置場所を指定します。 有効な値は'in'(グラフ内に配置), 'out'(グラフ外に配置), 'none'(軸タイトルを省略) |
| backgroundColor | string or object| グラフの背景色を指定します。 |
| backgroundColor.fill | string | グラフの背景色を指定します。 |
| backgroundColor.stroke | string | グラフ描画領域の枠線の色を指定します。 |
| backgroundColor.strokeWidth | number | グラフ描画領域の枠線の太さを指定します。 |
| bar.groupWidth | number or string | 棒グラフのバーの幅を指定します。 |
| candlestick.hollowIsRising | boolean | trueの場合、ロウソクチャートで上昇中のバーを白抜き、落下中のバーを塗りつぶしで表示します。falseの場合は逆になります。 |
| candlestick.fallingColor.fill | string | 落下中のバーの背景色を指定します。 |
| candlestick.fallingColor.stroke | string | 落下中のバーの線の色を指定します。 |
| candlestick.fallingColor.strokeWidth | number | 落下中のバーの線の太さを指定します。 |
| candlestick.risingColor.fill | string | 上昇中のバーの背景色を指定します。 |
| candlestick.risingColor.stroke | string | 上昇中のバーの線の色を指定します。 |
| candlestick.risingColor.strokeWidth | number | 上昇中のバーの線の太さを指定します。 |
| chartArea | object| グラフの位置/大きさを指定します。 |
| chartArea.backgroundColor | string or object| グラフの背景色を指定するようですが、backgroundColorとの違いが分からないので使っていません。 |
| chartArea.left | number or string | グラフの描画領域左端からのX座標を指定します。 |
| chartArea.top | number or string | グラフの描画領域上端からのY座標を指定します。 |
| chartArea.width | number or string | グラフの幅を指定します。 |
| chartArea.height | number or string | グラフの高さを指定します。 |
| colors | array | グラフの色を配列で指定します。 |
| crosshair | object | 十字線のプロパティを指定します。 |
| crosshair.color | string | 十字線の色を指定します。 |
| crosshair.focused | object | フォーカス時の十字線のプロパティを指定します。 |
| crosshair.opacity | number | 十字線の透明度を指定します。 |
| crosshair.orientation | string | 十字線を表示する向きを指定します。 有効な値は'vertical'(垂直のみ), 'horizontal'(水平のみ), 'both'(両方) |
| crosshair.selected | object | 選択時の十字線のプロパティを指定します。 |
| crosshair.trigger | string | 十字線を表示するイベントを指定します。 有効な値は'focus'(要素にrolloverしたら表示), 'selection'(要素を選択したら表示), 'none'(十字線を表示しない) |
| curveType | string | 曲線の種類を指定します。 有効な値は'none'(直線), 'function'(曲線) |
| dataOpacity | number | グラフの透明度を指定します。 |
| enableInteractivity | boolean | trueを指定すると、グラフにrollover/選択した際にツールチップが表示されます。 ※ツールチップの表示のイベントは'tooltip.trigger'で指定します。 |
| focusTarget | string | ツールチップを表示するイベントの対象を指定します。 有効な値は'dataum'(個別のデータ), 'category'(データグループ) |
| fontSize | number | グラフ中に表示されるテキストのフォントサイズを指定します。 |
| fontName | string | グラフ中に表示されるテキストのフォント名を指定します。 |
| forceIFrame | boolean | trueの場合、iFrameにグラフを描画します。 |
| hAxis | object | 水平方向の要素のプロパティを指定します。 |
| hAxis.baseline | number | ??? |
| hAxis.baselineColor | number | 水平方向のベースラインの色を指定します。 ※この指定が有効なのは、グラフのタイプがContinuousの場合のみです。 |
| hAxis.direction | number | 横軸の要素の配置方向。 1で通常、-1で逆順 |
| hAxis.format | string | 数値 or 日付ラベルのフォーマットを指定します。 ※この指定が有効なのは、グラフのタイプがContinuousの場合のみです。 |
| hAxis.glidlines | object | 水平方向のグリッドラインのプロパティを指定します。 ※この指定が有効なのは、グラフのタイプがContinuousの場合のみです。 |
| hAxis.glidlines.color | string | 水平方向のグリッドラインの色を指定します。 |
| hAxis.glidlines.count | number | 水平方向のグリッドラインの数を指定します。 |
| hAxis.minorGlidlines | object | 水平方向の補助グリッドラインのプロパティを指定します。 ※この指定が有効なのは、グラフのタイプがContinuousの場合のみです。 |
| hAxis.minorGlidlines.color | object | 水平方向の補助グリッドラインの色を指定します。 |
| hAxis.minorGlidlines.count | number | 水平方向の補助グリッドラインの数を指定します。 |
| hAxis.logScale | number | ??? |
| hAxis.textPosition | string | 水平方向のテキストの表示位置。 有効な値は'out'(グラフ外に配置), 'in'(グラフ内に配置), 'none'(表示しない) |
| hAxis.textStyle | string | 水平方向のテキストのテキストスタイルを指定します。|
| hAxis.ticks | array | 水平方向の目盛りを配列で指定します。配列の各要素は有効な値(数値、日付等)である必要があります。 ※この指定が有効なのは、グラフのタイプがContinuousの場合のみです。 |
| hAxis.title | string | 水平方向のタイトルを指定します。 |
| hAxis.titleTextStyle | string | 水平方向のタイトルのテキストスタイルを指定します。 |
| hAxis.allowContainerBoundaryTextCufoff | boolean | ??? |
| hAxis.slantedText | boolean | trueを指定した場合、水平方向のテキストを傾けて表示します。 ※この指定が有効なのは、グラフのタイプがDiscreteでhAxis.textPositionが'out'の場合のみです。 |
| hAxis.slantedTextAngle | number | 水平方向のテキストを傾ける角度を指定します。 ※この指定が有効なのは、グラフのタイプがDiscreteでhAxis.textPositionが'out'の場合のみです。 |
| hAxis.maxAlternation | number | 水平方向のテキストが重なる際、何段までテキストがずれるのを許可するかを指定します。 ※この指定が有効なのは、グラフのタイプがDiscreteの場合のみです。 |
| hAxis.maxTextLines | number | 水平方向のテキストの最大許可行数を指定します。 ※この指定が有効なのは、グラフのタイプがDiscreteの場合のみです。 |
| hAxis.minTextSpacing | number | 水平方向のテキストの最小水平間隔を指定します。 ※この指定が有効なのは、グラフのタイプがDiscreteの場合のみです。 |
| hAxis.showTextEvery | number | 水平方向のテキストの表示の仕方を指定します。1===全てのテキストを表示する(長すぎるラベルは省略)。2===全てのラベルを表示(表示しきれないテキストは省略) ※この指定が有効なのは、グラフのタイプがDiscreteの場合のみです。 |
| hAxis.maxValue | number | 横軸の最大値を指定します。 ※この指定が有効なのは、グラフのタイプがDiscreteの場合のみです。 |
| hAxis.minValue | number | 横軸の最小値を指定します。 ※この指定が有効なのは、グラフのタイプがDiscreteの場合のみです。 |
| hAxis.viewWindowMode | string | 横軸をスケーリングする方法を指定します。 ※この指定が有効なのは、グラフのタイプがDiscreteの場合のみです。 |
| hAxis.viewWindow | object | 横軸のトリミング範囲を指定します。 |
| hAxis.viewWindow.max | number | 横軸のトリミング範囲の最大値を指定します。 ※hAxis.viewWindowModeが'pretty' or 'maximized'の場合、この指定は無視されます。 |
| hAxis.viewWindow.min | number | 横軸のトリミング範囲の最小値を指定します。 ※hAxis.viewWindowModeが'pretty' or 'maximized'の場合、この指定は無視されます。 |
| height | number | グラフの高さを指定します。 |
| interpolateNulls | boolean | trueを指定すると、不足しているポイントの値を推測して表示します。falseの場合、点線で補完します。 |
| isStacked | true | trueにすると、一連の値を積み重ねたグラフを描画します。 |
| legend | object | 凡例の表示の仕方を指定します。 |
| legend.alignment | string | 凡例の並びを指定します。 |
| legend.maxLines | number | 凡例の最大行数を指定します。※legend.positionが'top'の場合のみ機能します。 |
| legend.position | string | 凡例の表示位置を指定します。 |
| legend.textStyle | object | 凡例のテキストスタイルを指定します。 |
| orientation | string | グラフの向きを指定します。 ※有効な値は'horizontal'(水平), 'vertical'(垂直) |
| pointShape | string | 折れ線グラフ、エリアチャートのデータ要素の形状を指定します。 有効な値は'circle'(円), 'triangle'(三角), 'square'(四角), 'diamond'(ひし形), 'star'(星), 'polygon'(多角形) |
| pointSize | number | 折れ線グラフ、エリアチャートのデータ要素のサイズを指定します。 |
| reverseCategories | boolean | trueの場合、右から左にシリーズを描画します。 |
| selectionMode | string | 'multiple'を指定すると、ユーザは複数のデータポイントを選択することが出来ます。 |
| series | array | 各シリーズのフォーマットを指定します。 |
| seriesType | string | デフォルトのグラフの種類を指定します。 有効な値は'line'(折れ線グラフ), 'area'(エリアチャート), 'bars'(棒グラフ), 'candlesticks'(ローソク足), 'steppedArea'(ステップエリアチャート) |
| theme | string | グラフのテーマを指定します。 ※指定できるのは'maximized'(グラフの面積を最大化し、全てのラベルを表示)のみ |
| title | string | グラフのタイトルを指定します。 |
| titlePosition | string | グラフのタイトルの表示位置を指定します。 ※有効な値は'in'(グラフ内に配置), 'out'(グラフ外に配置), 'none'(軸タイトルを省略) |
| titleTextStyle | objecgt | グラフのタイトルのテキストスタイルを指定します。 |
| tooltip | objecgt | ツールチップのプロパティを指定します。 |
| tooltip.isHtml | boolean | trueの場合、ツールチップの描画をHTMLで行います。 |
| tooltip.showColorCode | boolean | trueの場合、ツールチップに各スライスの色の正方形を表示します。 |
| tooltip.textStyle | object | ツールチップのテキストスタイルを指定します。 |
| tooltip.trigger | string | ツールチップを表示させる方法を指定します。 有効な値は'focus'(要素にrolloverしたら表示), 'selection'(要素を選択したら表示), 'none'(ツールチップを表示しない) |
| vAxes | array | 複数の垂直軸を持つグラフの場合、各垂直軸のプロパティを指定します。 |
| vAxis | object | 垂直方向の要素のプロパティを指定します。 |
| vAxis.baseline | number | ??? |
| vAxis.baselineColor | number | 垂直方向のベースラインの色を指定します。 |
| vAxis.direction | number | 縦軸の要素の配置方向。 1で通常、-1で逆順 |
| vAxis.format | string | 数値 or 日付ラベルのフォーマットを指定します。 ※この指定が有効なのは、グラフのタイプがContinuousの場合のみです。 |
| vAxis.glidlines | object | 垂直方向のグリッドラインのプロパティを指定します。 |
| vAxis.glidlines.color | string | 垂直方向のグリッドラインの色を指定します。 |
| vAxis.glidlines.count | number | 垂直方向のグリッドラインの数を指定します。 |
| vAxis.minorGlidlines | object | 垂直方向の補助グリッドラインのプロパティを指定します。 |
| vAxis.minorGlidlines.color | object | 垂直方向の補助グリッドラインの色を指定します。 |
| vAxis.minorGlidlines.count | number | 垂直方向の補助グリッドラインの数を指定します。 |
| vAxis.logScale | number | ??? |
| vAxis.textPosition | string | 垂直方向のテキストの表示位置。 有効な値は'out'(グラフ外に配置), 'in'(グラフ内に配置), 'none'(表示しない) |
| vAxis.textStyle | string | 垂直方向のテキストのテキストスタイルを指定します。|
| vAxis.ticks | array | 垂直方向の目盛りを配列で指定します。配列の各要素は有効な値(数値、日付等)である必要があります。 |
| vAxis.title | string | 垂直方向のタイトルを指定します。 |
| vAxis.titleTextStyle | string | 垂直方向のタイトルのテキストスタイルを指定します。 |
| vAxis.maxValue | number | 縦軸の最大値を指定します。 |
| vAxis.minValue | number | 縦軸の最小値を指定します。 |
| vAxis.viewWindowMode | string | 縦軸をスケーリングする方法を指定します。 |
| vAxis.viewWindow | object | 縦軸のトリミング範囲を指定します。 |
| vAxis.viewWindow.max | number | 縦軸のトリミング範囲の最大値を指定します。 ※vAxis.viewWindowModeが'pretty' or 'maximized'の場合、この指定は無視されます。 |
| vAxis.viewWindow.min | number | 縦軸のトリミング範囲の最小値を指定します。 ※vAxis.viewWindowModeが'pretty' or 'maximized'の場合、この指定は無視されます。 |
| width | number | グラフの幅を指定します。 |

5
5
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
5
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?