\r\n```\r\n\r\n```javascript\r\nconst columns = [\"2006年\", \"2007年\", \"2008年\", \"2009年\", \"2010年\", \"2011年\"];\r\nconst dataSets = [\r\n{label:\"A地域\", color:\"#00f\", values:[933, 501, 796, 969 , 998, 1150]},\r\n{label:\"B地域\", color:\"#f00\", values:[801, 453, 719, 952, 1011, 1231]}\r\n]\r\nlet svg = Snap(640, 480);\r\ndrawColumns(svg, columns);\r\ndrawTable(svg, dataSets);\r\ndrawGraph(svg);\r\nplotData(svg, dataSets);\r\n\r\nfunction drawColumns(svg, columns) {\r\n for (let i = 0; i < columns.length; i++) {\r\n svg.rect(60 + i * 60, 200 + 30, 60, 30).attr({\r\n stroke: \"#777\",\r\n strokeWidth: 2,\r\n fill: \"none\"\r\n });\r\n svg.text(65 + i * 60, 220 + 30, columns[i]);\r\n }\r\n}\r\n\r\nfunction drawTable(svg, dataSets) {\r\n for (let i = 0; i < dataSets.length; i++) {\r\n let data = dataSets[i];\r\n svg.rect(60 - 60, 200 + 60 + i * 30, 60, 30).attr({\r\n stroke: \"#777\",\r\n strokeWidth: 2,\r\n fill: \"none\"\r\n });\r\n svg.text(65 - 60, 220 + 60 + i * 30, data.label);\r\n for (let j = 0; j < data.values.length; j++) {\r\n svg.rect(60 + j * 60, 200 + 60 + i * 30, 60, 30).attr({\r\n stroke: \"#777\",\r\n strokeWidth: 2,\r\n fill: \"none\"\r\n });\r\n svg.text(65 + j * 60, 220 + 60 + i * 30, data.values[j]);\r\n }\r\n }\r\n}\r\n\r\nfunction drawGraph(svg) {\r\n for (let i = 0; i < 8; i++) {\r\n let x1 = 55;\r\n let y1 = i * 30 + 20;\r\n let x2 = 420;\r\n let y2 = i * 30 + 20;\r\n svg.line(x1, y1, x2, y2).attr({\r\n stroke: \"#777\",\r\n strokeWidth: 1\r\n });\r\n svg.text(x1 - 50, y1, String((7 - i) * 200));\r\n }\r\n svg.line(60, 20, 60, 230).attr({\r\n stroke: \"#777\",\r\n strokeWidth: 1\r\n });\r\n}\r\n\r\nfunction plotData(svg, dataSets) {\r\n for (let i = 0; i < dataSets.length; i++) {\r\n let data = dataSets[i];\r\n let graphData = [];\r\n for (let j = 0; j < data.values.length; j++) {\r\n graphData.push(60 + 30 + j * 60);\r\n graphData.push(230 - (data.values[j] / 1400) * 210);\r\n }\r\n svg.polyline(graphData).attr({\r\n stroke: data.color,\r\n strokeWidth: 2,\r\n fill: \"none\"\r\n });\r\n }\r\n}\r\n\r\n```\r\n\r\n■ プロット例\r\n![Snap.svg でのプロット例](a8e9e3675333768485bc36bf7b4a9e5e.png)\r\n\r\n<参考>\r\n■ Snap.svg\r\n[http://snapsvg.io/](http://snapsvg.io/)","dateModified":"2021-10-13T21:56:51.497Z","datePublished":"2021-10-13T21:56:51.497Z","upvoteCount":1,"url":"https://teratail.com/questions/364216#reply-495433"},"suggestedAnswer":[],"breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"item":{"@id":"https://teratail.com","name":"トップ"}},{"@type":"ListItem","position":2,"item":{"@id":"https://teratail.com/tags/Google%20Charts","name":"Google Chartsに関する質問"}},{"@type":"ListItem","position":3,"item":{"@id":"https://teratail.com/questions/364216","name":"Javascriptで表とグラフを組み合わせた図を作りたい"}}]}}}
質問するログイン新規登録

Q&A

解決済

1回答

2528閲覧

Javascriptで表とグラフを組み合わせた図を作りたい

kamijyo

総合スコア10

Google Charts

Google Chartsは、円グラフ・棒グラフ・折れ線グラフなどのさまざまなグラフをJavaScriptで容易に表示できる無料のライブラリ。デザインやイベント処理といったカスタマイズができ、商用利用も可能です。

Chart.js

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

JavaScript

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

0グッド

1クリップ

投稿2021/10/13 08:04

0

1

Javascriptで下図のような表とグラフを組み合わせた図を作りたいと思っています。
グラフの例
Google ChartやChart.jsなど、このような表を作るのに適したライブラリを教えて頂けませんか。

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

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

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

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

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

yambejp

2021/10/13 09:10

折れ線グラフくらならSVGで自作とか検討されていませんか?
guest

回答1

0

ベストアンサー

試しに SVG のライブラリ(Snap.svg)を用いて、プロットしてみました。
https://jsfiddle.net/cx20/nc4w9s0r/1/

html

1<script src="https://cdnjs.cloudflare.com/ajax/libs/snap.svg/0.5.1/snap.svg-min.js"></script>

javascript

1const columns = ["2006年", "2007年", "2008年", "2009年", "2010年", "2011年"]; 2const dataSets = [ 3{label:"A地域", color:"#00f", values:[933, 501, 796, 969 , 998, 1150]}, 4{label:"B地域", color:"#f00", values:[801, 453, 719, 952, 1011, 1231]} 5] 6let svg = Snap(640, 480); 7drawColumns(svg, columns); 8drawTable(svg, dataSets); 9drawGraph(svg); 10plotData(svg, dataSets); 11 12function drawColumns(svg, columns) { 13 for (let i = 0; i < columns.length; i++) { 14 svg.rect(60 + i * 60, 200 + 30, 60, 30).attr({ 15 stroke: "#777", 16 strokeWidth: 2, 17 fill: "none" 18 }); 19 svg.text(65 + i * 60, 220 + 30, columns[i]); 20 } 21} 22 23function drawTable(svg, dataSets) { 24 for (let i = 0; i < dataSets.length; i++) { 25 let data = dataSets[i]; 26 svg.rect(60 - 60, 200 + 60 + i * 30, 60, 30).attr({ 27 stroke: "#777", 28 strokeWidth: 2, 29 fill: "none" 30 }); 31 svg.text(65 - 60, 220 + 60 + i * 30, data.label); 32 for (let j = 0; j < data.values.length; j++) { 33 svg.rect(60 + j * 60, 200 + 60 + i * 30, 60, 30).attr({ 34 stroke: "#777", 35 strokeWidth: 2, 36 fill: "none" 37 }); 38 svg.text(65 + j * 60, 220 + 60 + i * 30, data.values[j]); 39 } 40 } 41} 42 43function drawGraph(svg) { 44 for (let i = 0; i < 8; i++) { 45 let x1 = 55; 46 let y1 = i * 30 + 20; 47 let x2 = 420; 48 let y2 = i * 30 + 20; 49 svg.line(x1, y1, x2, y2).attr({ 50 stroke: "#777", 51 strokeWidth: 1 52 }); 53 svg.text(x1 - 50, y1, String((7 - i) * 200)); 54 } 55 svg.line(60, 20, 60, 230).attr({ 56 stroke: "#777", 57 strokeWidth: 1 58 }); 59} 60 61function plotData(svg, dataSets) { 62 for (let i = 0; i < dataSets.length; i++) { 63 let data = dataSets[i]; 64 let graphData = []; 65 for (let j = 0; j < data.values.length; j++) { 66 graphData.push(60 + 30 + j * 60); 67 graphData.push(230 - (data.values[j] / 1400) * 210); 68 } 69 svg.polyline(graphData).attr({ 70 stroke: data.color, 71 strokeWidth: 2, 72 fill: "none" 73 }); 74 } 75} 76

■ プロット例
Snap.svg でのプロット例

<参考>
■ Snap.svg
http://snapsvg.io/

投稿2021/10/13 21:56

cx20

総合スコア4707

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.29%

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

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

質問する

関連した質問