D3 React framework with pan and zoom functionality. Mouse click to create new point on graph











up vote
0
down vote

favorite












I am using a the d3 library to create a scatterplot graph in a React application. enter image description here Specifically I am trying to select points on the graph and have done so by clicking the <Circle> elements. I would like to select them by clicking anywhere on the screen instead of on the <Circle> element.



Having trouble converting the mouse click coordinate from the pixel position to the position on the scatterplot. Have successfully captured the mouse click pixel coordinate but am having trouble converting it to the graph coordinate when the graph is moved via panning or zooming.



let x = nextProps.mouseCoords.x;
let y = nextProps.mouseCoords.y;

console.log(this.xScale.invert(x) + " " + this.yScale.invert(y));


^this logs coordinates that are not correct.



Here is the scale functionality.



this.xScale = d3.scaleLinear()
.domain([0, d3.max(data, ([x, y]) => x)])
.range([0, width]);
this.yScale = d3.scaleLinear()
.domain([0, d3.max(data, ([x, y]) => y)])
.range([0, height]);

if (zoomTransform && zoomType === "detail") {
this.xScale.domain(zoomTransform.rescaleX(this.xScale).domain());
this.yScale.domain(zoomTransform.rescaleY(this.yScale).domain());
}


Any help would be greatly appreciated.










share|improve this question









New contributor




David Goode is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.




















  • Do you have your code on a sandbox or somewhere I can take a look?
    – Louis345
    Nov 6 at 19:06















up vote
0
down vote

favorite












I am using a the d3 library to create a scatterplot graph in a React application. enter image description here Specifically I am trying to select points on the graph and have done so by clicking the <Circle> elements. I would like to select them by clicking anywhere on the screen instead of on the <Circle> element.



Having trouble converting the mouse click coordinate from the pixel position to the position on the scatterplot. Have successfully captured the mouse click pixel coordinate but am having trouble converting it to the graph coordinate when the graph is moved via panning or zooming.



let x = nextProps.mouseCoords.x;
let y = nextProps.mouseCoords.y;

console.log(this.xScale.invert(x) + " " + this.yScale.invert(y));


^this logs coordinates that are not correct.



Here is the scale functionality.



this.xScale = d3.scaleLinear()
.domain([0, d3.max(data, ([x, y]) => x)])
.range([0, width]);
this.yScale = d3.scaleLinear()
.domain([0, d3.max(data, ([x, y]) => y)])
.range([0, height]);

if (zoomTransform && zoomType === "detail") {
this.xScale.domain(zoomTransform.rescaleX(this.xScale).domain());
this.yScale.domain(zoomTransform.rescaleY(this.yScale).domain());
}


Any help would be greatly appreciated.










share|improve this question









New contributor




David Goode is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.




















  • Do you have your code on a sandbox or somewhere I can take a look?
    – Louis345
    Nov 6 at 19:06













up vote
0
down vote

favorite









up vote
0
down vote

favorite











I am using a the d3 library to create a scatterplot graph in a React application. enter image description here Specifically I am trying to select points on the graph and have done so by clicking the <Circle> elements. I would like to select them by clicking anywhere on the screen instead of on the <Circle> element.



Having trouble converting the mouse click coordinate from the pixel position to the position on the scatterplot. Have successfully captured the mouse click pixel coordinate but am having trouble converting it to the graph coordinate when the graph is moved via panning or zooming.



let x = nextProps.mouseCoords.x;
let y = nextProps.mouseCoords.y;

console.log(this.xScale.invert(x) + " " + this.yScale.invert(y));


^this logs coordinates that are not correct.



Here is the scale functionality.



this.xScale = d3.scaleLinear()
.domain([0, d3.max(data, ([x, y]) => x)])
.range([0, width]);
this.yScale = d3.scaleLinear()
.domain([0, d3.max(data, ([x, y]) => y)])
.range([0, height]);

if (zoomTransform && zoomType === "detail") {
this.xScale.domain(zoomTransform.rescaleX(this.xScale).domain());
this.yScale.domain(zoomTransform.rescaleY(this.yScale).domain());
}


Any help would be greatly appreciated.










share|improve this question









New contributor




David Goode is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.











I am using a the d3 library to create a scatterplot graph in a React application. enter image description here Specifically I am trying to select points on the graph and have done so by clicking the <Circle> elements. I would like to select them by clicking anywhere on the screen instead of on the <Circle> element.



Having trouble converting the mouse click coordinate from the pixel position to the position on the scatterplot. Have successfully captured the mouse click pixel coordinate but am having trouble converting it to the graph coordinate when the graph is moved via panning or zooming.



let x = nextProps.mouseCoords.x;
let y = nextProps.mouseCoords.y;

console.log(this.xScale.invert(x) + " " + this.yScale.invert(y));


^this logs coordinates that are not correct.



Here is the scale functionality.



this.xScale = d3.scaleLinear()
.domain([0, d3.max(data, ([x, y]) => x)])
.range([0, width]);
this.yScale = d3.scaleLinear()
.domain([0, d3.max(data, ([x, y]) => y)])
.range([0, height]);

if (zoomTransform && zoomType === "detail") {
this.xScale.domain(zoomTransform.rescaleX(this.xScale).domain());
this.yScale.domain(zoomTransform.rescaleY(this.yScale).domain());
}


Any help would be greatly appreciated.







reactjs d3.js graph zoom pan






share|improve this question









New contributor




David Goode is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.











share|improve this question









New contributor




David Goode is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.









share|improve this question




share|improve this question








edited Nov 5 at 9:46









rioV8

3,3682210




3,3682210






New contributor




David Goode is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.









asked Nov 5 at 3:44









David Goode

1




1




New contributor




David Goode is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.





New contributor





David Goode is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.






David Goode is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.












  • Do you have your code on a sandbox or somewhere I can take a look?
    – Louis345
    Nov 6 at 19:06


















  • Do you have your code on a sandbox or somewhere I can take a look?
    – Louis345
    Nov 6 at 19:06
















Do you have your code on a sandbox or somewhere I can take a look?
– Louis345
Nov 6 at 19:06




Do you have your code on a sandbox or somewhere I can take a look?
– Louis345
Nov 6 at 19:06

















active

oldest

votes











Your Answer






StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");

StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);

StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});

function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});


}
});






David Goode is a new contributor. Be nice, and check out our Code of Conduct.










 

draft saved


draft discarded


















StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53148036%2fd3-react-framework-with-pan-and-zoom-functionality-mouse-click-to-create-new-po%23new-answer', 'question_page');
}
);

Post as a guest





































active

oldest

votes













active

oldest

votes









active

oldest

votes






active

oldest

votes








David Goode is a new contributor. Be nice, and check out our Code of Conduct.










 

draft saved


draft discarded


















David Goode is a new contributor. Be nice, and check out our Code of Conduct.













David Goode is a new contributor. Be nice, and check out our Code of Conduct.












David Goode is a new contributor. Be nice, and check out our Code of Conduct.















 


draft saved


draft discarded














StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53148036%2fd3-react-framework-with-pan-and-zoom-functionality-mouse-click-to-create-new-po%23new-answer', 'question_page');
}
);

Post as a guest




















































































這個網誌中的熱門文章

Xamarin.form Move up view when keyboard appear

Post-Redirect-Get with Spring WebFlux and Thymeleaf

Anylogic : not able to use stopDelay()