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

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

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

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

JavaScript

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

Q&A

0回答

1151閲覧

d3でzoom適用時にscaleの更新がうまくできない

MistletoeNaoko

総合スコア15

D3.js

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

JavaScript

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

0グッド

0クリップ

投稿2019/06/17 15:51

d3の散布図に関する質問です。
zoomするときに下記のような記述で軸のスケールを更新すると思いますが、他の場所でスケールを利用しているため、新しくnew_Scaleを作らずに、元の、xScaleyScaleに代入しようとしました。

  • 現在の実装

javascript

1let new_xScale = d3.event.transform.rescaleX(this.xScale); 2let new_yScale = d3.event.transform.rescaleY(this.yScale); 3 4xAxis.call(xLabel.scale(new_xScale)); 5yAxis.call(yLabel.scale(new_yScale)); 6 7points 8 .attr('cx', function(d) {return new_xScale(d[xItem])}) 9 .attr('cy', function(d) {return new_yScale(d[yItem])});
  • やりたいこと

javascript

1this.xScale = d3.event.transform.rescaleX(this.xScale); 2this.yScale = d3.event.transform.rescaleY(this.yScale); 3 4xAxis.call(xLabel.scale(this.xScale)); 5yAxis.call(yLabel.scale(this.yScale)); 6 7points 8 .attr('cx', function(d) {return this.xScale(d[xItem])}.bind(this)) 9 .attr('cy', function(d) {return this.yScale(d[yItem])}.bind(this));

しかし、後者のような記述にすると、zoomが想定されるような動作をしません。
例えば領域を移動させようとすると、下図のように過剰に動き、最終的にプロットを見失ってしまいます。
想定外のzoom動作

図の中にあるオレンジ色の十字を、別のviewの動作と対応させて対話的に動かしており、そのために、外部の関数から、this.xScale, this.yScaleを参照する必要があるため、上記のように更新したscaleをthis.xScale, this.yScaleに代入したいのです。

他にもthis.xScale, this.yScaleのdomainを更新してみたりといろいろやってみたのですが、同じようにうまく動作しませんでした。

お知恵をお貸しいただければ幸いです。
どうぞよろしくお願いいたします。

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問