Chart.js 複数軸で右表示しない、min/max設定ができない

ホタイブログ

他のウェブ記事を参考に、CodeignIter4にてChart.jsでグラフ表示しましたが、2番めのY軸表示が右側に行かず、min・maxの設定もできませんでした。原因を調べたところ、Chart.js3.x以降で書き方が変わっていたためでした。
本記事では、Chart.js2..xと3.xの変更部分のコードを紹介します。
記事前半はCodeignIter4の内容ですので、興味のない方はグラフ表示まで飛ばしてください。

今回使ったChart.jsのバージョン(CDN): ダウンロードはこちら
Chart.js 3.5.1
Chart.js 2.9.4

目次

使用データとグラフ化の内容

使用したテストデータは、date、sold_qtyです。
グラフの日付メモリに、日ごとの販売数量・累積販売数を表示させ、日ごとの販売数量をY右軸、累積販売数をY左軸にとります。

date:  2021年8月1日から31日まで
sold_qty: 日ごとに1000前後の数

CodeignIter4のrouteとcontrol

route

コントロールtestでデータを取得し、chartjsTest.phpに遷移します。


$routes->get('/chartjsTest', 'test::chartJs');

control

testモデルを作ってありますが、ここでは省略します。
testモデルでデータベースで取得したデータを日付ラベル、日ごと数量、累積数量の配列にします
作ったデータとともに、chartjsTest.phpに遷移します。


 namespace App\Controllers;
use App\Models\testModel;

class test extends BaseController
{
   public function chartJs()
   {
     $testModel = new testModel;
     $testData = $testModel -> getTestData();

//グラフデータ用に、日付、日別数量、累積数量をそれぞれの配列に格納します。
     $dateArray = [];
     $qtyDayArray = [];
     $qtyAccumArray = [];
     $qtyAccum = 0;
     foreach($testData as $row){
       //日付を表示したい形式に変換して配列に格納しています。
       $dateArray[] = date('d/M', strtotime($row['date']));
       $qtyDayArray[] = $row['qty_sold'];
       $qtyAccum += $row['qty_sold'];
       $qtyAccumArray[] = $qtyAccum;
     }

//$graphDataに3つの配列を格納し、chartjsTest.phpに渡します。
     $graphData = [
   'date' => json_encode($dateArray),
   'qtyDay' => json_encode($qtyDayArray),
   'qtyAccum' => json_encode($qtyAccumArray)
   ];

     return view('chartjsTest', $graphData);
   }
}

グラフ表示

canvasタグ内に、グラフを表示します。
scaleのY軸表記方法が変わっているため、Ver2.xの方法で記述すると、Ver3.xでは反映できません。
Ver3.xでの記述は以下になります。
HTML


  <canvas id="testChart" width="300" height="200"></canvas>

スクリプト

<script type="text/javascript">
   let testChart = document.getElementById('testChart').getContext('2d');
   window.myChart = new Chart(testChart, {
     type:'line', // 線グラフ
     data:{
       labels: ,
       datasets: [{
         label: "数量累計",
         type:'line',
         yAxisID:"yleft",
         fill: false,
         backgroundColor: "#90EE90",
         borderWidth: 2,
         borderColor: "#90EE90",
         data: ,
       },{
         label: "日べつ数量",
         type:"bar",
         yAxisID:"yright",
         fill: false,
         backgroundColor: "#BA55D3",
         borderWidth: 1,
         borderColor: "#BA55D3",
         data: ,
       }]
     },
     options: {
       responsive:true,
       scales: {
         yleft:{
           type: 'linear',
           position: "left",
           beginAtZero: true,
           max: 35000,
           min: 0,
           stepSize: 1000
         },
         yright:{
           type: 'linear',
           position: "right",
           beginAtZero: true,
           max: 1500,
           min: 0,
           stepSize: 100
         }
       }
     }
   });
</script>

下図のように、グラフが表示されました。

Chart.js3.5.1グラフ

注意

Chart.js 3.xでは、Y軸のID名にハイフン”-”が含むれると、
Uncaught SyntaxError: Unexpected token ‘-‘
が発生しました。
エラー yAxisID:”yleft”
OK  yAxisID:”yleft”
 

yAxisIDとyAxesIDの記述は、yAxisIDが正しいようです。公式サイトはyAxisIDであることと、yAxesIDだと、棒グラフの方が正しく表示されませんでした。

Chart.js 3.5.1と2.9.4の比較

date:{}のyAxisIDにハイフンが使えるかどうかの他にoptionの記述方法が異なります。
下記で比較してください。
max, minの記述も、ticks:に記述するのではなく、yAxis名の定義に入れます。

Chart.js 3.5.1
options: {
   responsive:true,
   scales: {
     yleft:{
       type: 'linear',
       position: "left",
       beginAtZero: true,
       max: 35000,
       min: 0,
       stepSize: 1000
     },



     yright:{
       type: 'linear',
       position: "right",
       beginAtZero: true,
       max: 1500,
       min: 0,
       stepSize: 100
     }
   }
}

Chart.js 2.9.4
options: {
   responsive:true,
   scales: {
     yAxes: [
       {
         id:"y-left",
         position: "left",
         ticks: {
           max: 35000,
           min: 0,
           stepSize: 1000
         }
       },
       {
         id:"y-right",
         position: "right",
         ticks: {
           max: 1500,
           min: 0,
           stepSize: 100
         }
       }
     ],
   }
}

Chart.js 3.xに2.xの記述を行うと、下図のように右Y軸が右に寄らず、左になっています。

Chart.js2.9.4グラフ

以上Chart.js 3.0の複数軸ついてまとめてみました。

——ホタイブログ—–

フリーランス案件特集

関連記事:
CodeIgniter4 MS SQL SERVERの接続
CodeIgniter4 複数のデータベースを設定する
JSONを使ったDataTablesに編集ボタンを実装する。
CodeIgniter4にJSONを使ってDataTablesを実装する
CodeIgniter4にBootstrap、DataTablesを使ったページネーション
CodeIgniter4 シンプルなページネーションの実装

SNSでもご購読できます。

コメント

コメントを残す

*