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

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

詳細はこちら
D3.js

D3.jsとは、データに基づいてHTMLやSVGドキュメントを編集するために作られた、小規模なオープンソースのJavaScript可視化ライブラリです。

Q&A

解決済

1回答

300閲覧

1つのsvg内に同一のタグでデータバインドして描画する方法について

tt02

総合スコア36

D3.js

D3.jsとは、データに基づいてHTMLやSVGドキュメントを編集するために作られた、小規模なオープンソースのJavaScript可視化ライブラリです。

0グッド

0クリップ

投稿2019/10/09 14:21

イメージ説明

棒グラフ部分の文字情報部分に関する質問になります。
(棒グラフはネット上のグラフの中から適当に私の質問にあうものをサンプルに探してきたものです)

サンプル画像のようなグラフを作りたいと考えています。
質問を簡略化するため、描画位置の属性は省略しています。

下記のデータをサンプルにように文字列出力するためにバインドする方法で悩んでいます。

var dataset1 = [1684, 1247, 1198, 965, 648];
var dataset2 = ['東京','大阪','福岡','名古屋','仙台'];

d3.select("svg").selectAll("p")
.data(dataset1)
.enter()
.append("p")
.text(function(d) { return d + ""; });

これで、dataset1についてはバインドしつつ、描画できました。

しかし、上記を行った後、
d3.select("svg").selectAll("p")
.data(dataset2)
.enter()
.append("p")
.text(function(d) { return d; });

としても、dataset2の情報が描画できません。

私の考えでは、selectAll("p")で取得したオブジェクトの数が
dataset2の数と同様であるため、何も生成されないのでは無いかと考えましたが、
確信に至りません。

制約としては、
1つのsvgタグ内にdataset1とdataset2の内容を描画したい。
・2種類のデータセットを反映させる際、それぞれ同じタグでappendしたい。上の例ではp。

どんな方法があるのか、大変お手数ですが、お知らせいただければ大変うれしいです。

どうぞ、よろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

自己解決

自己解決しました。

https://codeday.me/jp/qa/20190317/411534.html
が、参考になりました。

セレクターにクラスをつけて
selectAllすることで、データごとに独立させたテキスト表示ができました。

投稿2019/10/10 10:44

tt02

総合スコア36

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問