Chart.js の2系から4系(3系？)への移行：時系列グラフを描くときの注意点．

# これはなに?

Chart.jsで時系列グラフを描くときの方法についてのメモ． 
バージョン4系(3系？)では2系で必要なかった指定の追加が必要だった． 

Chart.jsを初めて試したときは[こちら](https://qiita.com/Haruka-Ogawa/items/59facd24f2a8bdb6d369)の非常にわかりやすい記事を参考にさせてもらった．　
しばらくこのサンプルコードのバージョン2.7.2をそのまま使っていたのだけど，現在最新の4.2.1に切り替えた．その際の[グラフ設定の変更](https://qiita.com/teddokano/items/808bcafac41fcf987b8b)の他にHTML側でも設定を追加した． 

# やったこと　
HTMLの中で，CDNからChart.jsのライブラリをもらってくる部分．ここを変更

```for_version2.html
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.7.2/Chart.bundle.js"></script>
```
時系列のグラフを描くので date-fns というライブラリを使いたいのだけど，2系では必要のなかったその指定が必要だった．　
さらにcdnjs.cloudflare.comサイトからではなぜかうかくいかなかったので，別のサーバからもらってくるようにした（[ここを参考](https://github.com/chartjs/chartjs-adapter-date-fns)にした）．

```for_version4.html
<script src="https://cdn.jsdelivr.net/npm/chart.js@4.2.1/dist/chart.umd.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/chartjs-adapter-date-fns/dist/chartjs-adapter-date-fns.bundle.min.js"></script>
```

# さらに 
CDNを使うコードはインターネット接続が前提． 
しかし作成中のシステムは組込用の小さな基板をHTMLサーバにして，ブラウザからアクセスして操作するだけのシステム．なのでインターネットに接続しなくても動くようになってるのが理想． 
そういうわけでローカルに[Chart.jsをここからダウンロード](https://github.com/chartjs/Chart.js/releases/)してきて，インターネットなしでも使えるように変更してみた． 
ダウンロードしてきたchart.js-4.2.1.tgzを解凍し，package→dist→chart.umd.jsを組込システムのストレージにコピー． 
HTMLは以下の1行だけ．CDNでv4.2.1を使う場合に必要だった2行目のdate-fnsを使う指定は必要ないみたい
```for_local_version4.html
<script src="chartjs/chart.umd.js"></script>
```

# さらに，さらに  
CDNを使った例で，2系，4系の描画を行うサンプルの全体も載せておきます．
プロットしているデータはどちらも同じ．どちらもほぼ同じ結果が得られています．

ちなみに，バージョン4ではブラウザのウィンドウを小さくした時には随時リサイズされるのですが，大きくしたときにはグラフはそのままのサイズに留まってしまいます．
バージョン3系では4と同じのデータのまま，縮小/拡大リサイズの両方に対応できます．

バージョン2.7.2↓↓ 
![chart272.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3288603/783c5144-2ce4-4a69-93ef-13c5cf250fea.png)

バージョン4.2.1↓↓ 
![chart421.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3288603/f56ad82b-011d-0095-ae11-8381207f46cc.png)

下のサンプルコードはhtmlファイルとして保存してブラウザで開くと，そのまま結果を見ることができます．
```chart_v2.html
<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8" />
	<title>Chart.js 2.7.2 sample</title>
</head>
<body>
	Chart.js 2.7.2 sample
	
	<div>
		<canvas id="Chart0"></canvas>
	</div>
	
	<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.7.2/Chart.bundle.js"></script>
	<script>
		let	ctx = document.getElementById( "Chart0" );
		let chart = new Chart( ctx, 
			{
				type: 'line',
				data: {
					labels: [ "05:11:10", "05:11:11", "05:11:12", "05:11:13", "05:11:14", 
							  "05:11:15", "05:11:16", "05:11:17", "05:11:18", "05:11:19", 
							 ],
					datasets: [
						{
							label: 'x',
							data: [ 3, 2, 1, 5, 3, 7, 8, 9, 3, 9 ],
							borderColor: "rgba( 255, 0, 0, 1 )",
							backgroundColor: "rgba( 0, 0, 0, 0 )"
						},
						{
							label: 'y',
							data: [ 2, 9, 5, 4, 7, 4, 1, 0, 7, 3 ],
							borderColor: "rgba( 0, 255, 0, 1 )",
							backgroundColor: "rgba( 0, 0, 0, 0 )"
						},
						{
							label: 'z',
							data: [ 6, 0, 5, 1, 5, 8, 3, 2, 9, 8 ],
							borderColor: "rgba( 0, 0, 255, 1 )",
							backgroundColor: "rgba( 0, 0, 0, 0 )"
						},
					],
				},
				options: {
					animation: false,
					title: {
						display: true,
						text: '"g" now'
					},
					scales: {
						yAxes: [{
							ticks: {
								suggestedMax: 11,
								suggestedMin: -1,
								stepSize: 1,
								callback: function(value, index, values){
									return  value +  ' g'
								}
							},
							scaleLabel: {
								display: true,
								labelString: ' gravitational acceleration [g]'
							}
						}],
						xAxes: [{
							scaleLabel: {
								display: true,
								labelString: 'time'
							}
						}]
					},
				}
			}
		);
	</script>
</body>
</html>
```

```chart_v4.html
<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8" />
	<title>Chart.js 4.2.1 sample</title>
</head>
<body>
	Chart.js 4.2.1 sample
	
	<div>
		<canvas id="Chart0"></canvas>
	</div>
	<!--
	<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/3.9.1/chart.min.js"></script>	
	<script src="https://cdn.jsdelivr.net/npm/chart.js@4.2.1/dist/chart.umd.min.js"></script>	
	-->
	<script src="https://cdn.jsdelivr.net/npm/chart.js@4.2.1/dist/chart.umd.min.js"></script>	
	<script src="https://cdn.jsdelivr.net/npm/chartjs-adapter-date-fns/dist/chartjs-adapter-date-fns.bundle.min.js"></script>
	<script>
		let	ctx = document.getElementById( "Chart0" );
		let chart = new Chart( ctx, 
			{
				type: 'line',
				data: {
					labels: [ "05:11:10", "05:11:11", "05:11:12", "05:11:13", "05:11:14", 
							  "05:11:15", "05:11:16", "05:11:17", "05:11:18", "05:11:19", 
							 ],
					datasets: [
						{
							label: 'x',
							data: [ 3, 2, 1, 5, 3, 7, 8, 9, 3, 9 ],
							borderColor: "rgba( 255, 0, 0, 1 )",
							backgroundColor: "rgba( 0, 0, 0, 0 )",
							lineTension: 0.4,	//
						},
						{
							label: 'y',
							data: [ 2, 9, 5, 4, 7, 4, 1, 0, 7, 3 ],
							borderColor: "rgba( 0, 255, 0, 1 )",
							backgroundColor: "rgba( 0, 0, 0, 0 )",
							lineTension: 0.4,	//
						},
						{
							label: 'z',
							data: [ 6, 0, 5, 1, 5, 8, 3, 2, 9, 8 ],
							borderColor: "rgba( 0, 0, 255, 1 )",
							backgroundColor: "rgba( 0, 0, 0, 0 )",
							lineTension: 0.4,	//
						},
					],
				},
				options: {
					animation: false,
					plugins: {	//
						title: {
							display: true,
							text: '"g" now'
						}	//
					},
					scales: {
						y: {	//yAxes: [{
							suggestedMax: 11,	//
							suggestedMin: -1,	//
							ticks: {
								//suggestedMax: 11,
								//suggestedMin: -1,
								stepSize: 1,
								callback: function(value, index, values){
									return  value +  ' g'
								}
							},
							title: {	//scaleLabel: {
								display: true,
								text: ' gravitational acceleration [g]'	//labelString: ' gravitational acceleration [g]'
							}
						},
						x: {	//xAxes: [{
							title: {	//scaleLabel: {
								display: true,
								text: 'time'	//labelString: 'time'
							}
						}
					},
				}
			}
		);
	</script>
</body>
</html>
```


# 参考にしたサイト 
https://qiita.com/Haruka-Ogawa/items/59facd24f2a8bdb6d369　

https://github.com/chartjs/chartjs-adapter-date-fns

# 関連情報 
https://qiita.com/teddokano/items/808bcafac41fcf987b8b