質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
Chart.js

Chart.jsは、多様なグラフを組み込めるJavaScriptのライブラリ。折れ線グラフや棒グラフ、円グラフ、レーダーチャートなどのグラフの種類が用意されています。HTML5のCanvasを用いて描画され、マークアップも分かりやすく、簡単に編集することが可能です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

2226閲覧

chartjsでグラフを選択制にしたい

i-nr

総合スコア15

Chart.js

Chart.jsは、多様なグラフを組み込めるJavaScriptのライブラリ。折れ線グラフや棒グラフ、円グラフ、レーダーチャートなどのグラフの種類が用意されています。HTML5のCanvasを用いて描画され、マークアップも分かりやすく、簡単に編集することが可能です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

1クリップ

投稿2020/03/25 06:36

編集2020/06/15 12:46

chartjsで折れ線グラフを作成しています。
凡例をクリックするとグラフが表示・非表示と切り替わるように、セレクトボックスの選択で表示・非表示を切り替えたいです。
セレクトボックスは3つのカテゴリーに分けて、表示したいグラフをそこから選ぶようにしたいです。

セレクトボックスでグラフの表示を切り替えることはできたのですが、
グラフ名とセレクトされた項目名が一致せず、つまづいています。
グラフ自体はサンプル1-1とサンプル3-0とサンプル3-1が表示されているのに、
セレクトボックスではサンプル1-0、サンプル1-1、サンプル1-2で切り替わってしまいます。

ご教授ください。
よろしくお願いいたします。

説明が分かりにくかったり、添付コードが不足していればご指摘ください。
下記、現在のコードです。

html

1<div class="col-sm-2 col-md-2 col-lg-2"> 2 <div class="form-group"> 3  <label><span class="label-text">表示するグラフ(下記から選択)</span></label> 4  <select multiple="multiple" name="category_1" class="select-block selectpicker" title="カテゴリー1" data-selected-text-format="count > 0" data-count-selected-text="カテゴリー1"> 5   <option value="0" class="1_0" id="1_0">サンプル1-0</option> 6 <option value="1" class="1_1" id="1_1">サンプル1-1</option> 7 <option value="2" class="1_2" id="1_2">サンプル1-2</option> 8   <option value="3" class="1_3" id="1_3">サンプル1-3</option> 9 <option value="4" class="1_4" id="1_4">サンプル1-4</option> 10 <option value="5" class="1_5" id="1_5">サンプル1-5</option> 11 <option value="6" class="1_6" id="1_6">サンプル1-6</option> 12  </select> 13 </div> 14</div> 15<div class="col-sm-2 col-md-2 col-lg-2"> 16 <div class="form-group"> 17  <label class="hidden-xs"><span class="label-text">&nbsp;</span></label> 18  <select multiple="multiple" name="category_2" class="select-block selectpicker" title="カテゴリー2" data-selected-text-format="count > 0" data-count-selected-text="カテゴリー2"> 19   <option value="0" class="2_0" id="2_0">サンプル2-0</option> 20   <option value="1" class="2_1" id="2_1">サンプル2-1</option> 21  </select> 22 </div> 23</div> 24<div class="col-sm-2 col-md-2 col-lg-2"> 25 <div class="form-group"> 26  <label class="hidden-xs"><span class="label-text">&nbsp;</span></label> 27 <select multiple="multiple" name="category_3" class="select-block selectpicker" title="カテゴリー3" data-selected-text-format="count > 0" data-count-selected-text="カテゴリー3"> 28   <option value="0" class="3_0" id="3_0">サンプル3-0</option> 29   <option value="1" class="3_1" id="3_1">サンプル3-1</option> 30  </select> 31 </div> 32</div> 33 34<div class="row"> 35 <div class="col-md-10 col-lg-10"> 36  <canvas id="myChart" style="max-width: none"></canvas> 37 </div> 38 <div id="chart-legends" class="col-md-2 col-lg-2 note" style="top: 72px"></div> 39</div>

js

1// 文字数上、datasetsの諸々の設定は省略してあります。 2//表示するグラフ選択 3 var select_1 = document.querySelector('[name="category_1"]'); 4 select_1.addEventListener('change',() =>{ 5 for(var i = 0; i < select_1.length; i++) { 6 try{ 7 var meta_1 = myChart.getDatasetMeta(i); 8 if(select_1[i].selected) meta_1.hidden = false; 9 else meta_1.hidden = true; 10 }catch(e){ 11 } 12 } 13 myChart.update(); 14 }); 15 var select_2 = document.querySelector('[name="category_2"]'); 16 select_2.addEventListener('change',() =>{ 17 for(var i = 0; i < select_2.length; i++) { 18 try{ 19 var meta_2 = myChart.getDatasetMeta(i); 20 if(select_2[i].selected) meta_2.hidden = false; 21 else meta_2.hidden = true; 22 }catch(e){ 23 } 24 } 25 myChart.update(); 26 }); 27 var select_3 = document.querySelector('[name="category_3"]'); 28 select_3.addEventListener('change',() =>{ 29 for(var i = 0; i < select_3.length; i++) { 30 try{ 31 var meta_3 = myChart.getDatasetMeta(i); 32 if(select_3[i].selected) meta_3.hidden = false; 33 else meta_3.hidden = true; 34 }catch(e){ 35 } 36 } 37 myChart.update(); 38 }); 39 40 //グラフ初期表示 41 var myChart = new Chart(ctx,myChart()); 42 document.getElementById('chart-legends').innerHTML = myChart.generateLegend();

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

他にスマートなやり方があるかと思いますが、
グラフ毎にidを付けて、条件分岐を使って解決しました。
ありがとうございました。

投稿2020/06/17 04:36

i-nr

総合スコア15

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問