🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
JavaScript

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

2回答

3879閲覧

chart.js積立グラフでchart.update()を使うにはどうしたら良いでしょうか?

退会済みユーザー

退会済みユーザー

総合スコア0

JavaScript

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2019/10/22 05:28

編集2019/10/22 11:34

chart.jsで作成した積立グラフがあります。
これをchart.update()を使い、動的にデータの更新を行いたいです。

html

1<script> 2 var ctx = document.getElementById("BarChart").getContext('2d'); 3 var DiskChart = new Chart(ctx, { 4 type: 'bar', 5 data: { 6 labels: ["2018/9", "2018/10", "2018/11"], 7 datasets: [ 8 { 9 label: "しめじ", 10 data: [20, 26, 12], 11 }, 12 { 13 label: "えのき", 14 data: [28, 22, 32], 15 }, 16 17 { 18 label: "しいたけ", 19 data: [15, 23, 15], 20 }, 21 ] 22 }, 23 options: { 24 scales: { 25 xAxes: [{ 26 stacked: true, 27 }], 28 yAxes: [{ 29 stacked: true, 30 }], 31 } 32 } 33}); 34</script>

html

1<script> 2 var ctx = document.getElementById("BarChart").getContext('2d'); 3 var DiskChart = new Chart(ctx, { 4 type: 'bar', 5 data: { 6 labels: ["2018/9", "2018/10", "2018/11"], 7 datasets: [ 8 { 9 label: "リンゴ", 10 data: [20, 26, 12], 11 }, 12 { 13 label: "みかん", 14 data: [28, 22, 32], 15 }, 16 17 { 18 label: "ぶどう", 19 data: [15, 23, 15], 20 }, 21 ] 22 }, 23 options: { 24 scales: { 25 xAxes: [{ 26 stacked: true, 27 }], 28 yAxes: [{ 29 stacked: true, 30 }], 31 } 32 } 33}); 34</script>

公式ドキュメントを読みながら試行錯誤したのですが、上手くいきませんでした。
どなたか知恵を貸して頂けると嬉しいです。

html

1<div> 2<canvas id="BarChart"> 3</div> 4<button id="button" type="button">切り替え</button> 5 6<script> 7 document.addEventListener('DOMContentLoaded', function() { 8 9 var ctx = document.getElementById("BarChart").getContext("2d"); 10 var chart = new Chart(ctx, { 11 type: "bar", 12 data:{ 13 labels: ["1月","2月","3月"], 14 datasets: [ 15 { 16 label: "しめじ", 17 data: [20, 26, 12], 18 }, 19 { 20 label: "えのき", 21 data: [28, 22, 32], 22 }, 23 24 { 25 label: "しいたけ", 26 data: [15, 23, 15], 27 }, 28 ] 29 }, 30 options:{ 31 scales: { 32 xAxes: [{ 33 stacked: true, 34 }], 35 yAxes: [{ 36 stacked: true, 37 }], 38 } 39 } 40 }); 41 42 43 document.getElementById("button") 44 .addEventListener('click', 45 function() { 46 chart.data.labels = ["2000年","2001年","2002年"]; 47 chart.data.datasets = [{label: "リンゴ",data: [20, 26, 12]},{label: "みかん",data: [28, 22, 32]},{label: "ぶどう",data: [15, 23, 15]},] 48 chart.update(); 49 } 50 ); 51 }); 52 53</script>

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

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

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

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

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

guest

回答2

0

ベストアンサー

こんにちは

色々なやり方がありそうですが、一例として以下のようにすればよいかと思います。

javascript

1const CHART_DATA = { 2 MUSHROOMS: { 3 labels: ["1月", "2月", "3月"], 4 datasets: [{ 5 label: "しめじ", 6 data: [20, 26, 12], 7 backgroundColor: '#4b8e8d', 8 }, 9 { 10 label: "えのき", 11 data: [28, 22, 32], 12 backgroundColor: '#5eb7b7', 13 }, 14 15 { 16 label: "しいたけ", 17 data: [15, 23, 15], 18 backgroundColor: '#96d1c7', 19 }, 20 ] 21 }, 22 FRUITS: { 23 labels: ["2000年", "2001年", "2002年"], 24 datasets: [{ 25 label: "リンゴ", 26 data: [120, 110, 190], 27 backgroundColor: '#7c0a02', 28 }, { 29 label: "みかん", 30 data: [189, 120, 230], 31 backgroundColor: '#f45905', 32 }, { 33 label: "ぶどう", 34 data: [133, 105, 200], 35 backgroundColor: '#fb9224', 36 }] 37 } 38} 39 40 41 42document.addEventListener('DOMContentLoaded', function() { 43 44 let target = 'MUSHROOMS'; 45 46 var ctx = document.getElementById("BarChart").getContext("2d"); 47 var chart = new Chart(ctx, { 48 type: "bar", 49 data: { 50 labels: CHART_DATA[target].labels, 51 datasets: CHART_DATA[target].datasets 52 }, 53 options: { 54 scales: { 55 xAxes: [{ 56 stacked: true, 57 }], 58 yAxes: [{ 59 stacked: true, 60 }], 61 } 62 } 63 }); 64 65 66 document.getElementById("button") 67 .addEventListener('click', 68 function() { 69 target = target === 'MUSHROOMS' ? 'FRUITS' : 'MUSHROOMS'; 70 chart.data.labels = CHART_DATA[target].labels; 71 chart.data.datasets = CHART_DATA[target].datasets; 72 chart.update(); 73 } 74 ); 75});

なお上記のサンプルでは、切り替えが分かりやすく目視で確認できるように、バーに背景色をつけているのと、果物のdataを適当に変えました。

参考になれば幸いです。

投稿2019/10/22 14:52

jun68ykt

総合スコア9058

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

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

退会済みユーザー

退会済みユーザー

2019/10/22 15:27

素晴らしい回答ありがとうございました。 また何かありましたらお願いします。
jun68ykt

2019/10/22 15:31

どういたしまして。参考になれば幸いです。
退会済みユーザー

退会済みユーザー

2019/10/22 15:53

とても助かります。 参考までにお聞きしたいのですが、グラフの切替毎にアニメーションを実行するにはどうすれば良いでしょうか?
退会済みユーザー

退会済みユーザー

2019/10/22 16:09

あと出来ましたら、MUSHROOMSグラフが表示されている時は「FRUITSに切り替え」のボタンを、FRUITSグラフが表示されている時は「MUSHROOMSに切り替え」ボタンを表示する事は出来ますでしょうか? お手数ばかり掛けて大変申し訳ございません。
jun68ykt

2019/10/22 16:20 編集

その場合は、現在表示している chart を destroyしてから、再度、new Chart ですね。 以下サンプルです。 https://codepen.io/jun68ykt/pen/JjjEgjE?editors=1010 さらなる新たなご質問がありましたら、答えられるご質問には、なるべく回答したいと思いますので、新しい投稿にてお願い致します。
退会済みユーザー

退会済みユーザー

2019/10/22 16:33

ご丁寧にありがとうございます。 了解致しました。 お手数掛けて申し訳ございませんでした。次からはおっしゃるように新たな質問にて対応させて頂きますので今後ともよろしくお願いします。
jun68ykt

2019/10/22 17:13

承知しました。またお役に立てそうなご質問を楽しみにしております。草々
guest

0

そのままchart.update()をしても更新されるわけではなく、new Chart()で作ったオブジェクトに対してupdate()を呼んであげる必要があります。
この場合ですと DiskChart に対してですね。

投稿2019/10/22 08:56

8zca

総合スコア559

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

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

退会済みユーザー

退会済みユーザー

2019/10/22 09:22

アドバイスありがとうございます。 出来ればサンプルコードのご提示などがあると非常に助かるのですが、難しいでしょうか?
8zca

2019/10/22 10:09

そのままになりますけど DiskChart.update(); ですね。 初期表示がきのこ類で、なにかのイベント(ボタンをクリックしたり)トリガーでフルーツに置き換える場合は DiskChart.data.datasets = [{label: "リンゴ", data: [20, 26, 12]}, { みかんのオブジェクト }, {ぶどうのオブジェクト}]; DiskChart.update(); になります。 https://www.chartjs.org/docs/latest/developers/api.html 公式ページの .update の欄もあわせて確認してみてください。
退会済みユーザー

退会済みユーザー

2019/10/22 11:33

丁寧なアドバイスありがとうございます。 チャートの切り替えは出来たのですが、今度は元に戻らなくなってしまいました。 質問文にコードを載せますので、アドバイスお願いできないでしょうか?
8zca

2019/10/22 13:24

ボタンでの切り替えができているので、いまのコードを応用すれば目的の処理は実現できますね。 例えば、 var fruit = false; とフルーツかどうかのフラグを用意しておき、切り替えボタンがクリックされたら fruit = !fruit; と反転させる。 あとはfruitのフラグを見てdatasetsに入れるデータを場合分けして代入し、update()してあげればよいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問