gpt4 book ai didi

javascript - D3 : adding a line when clicking on a circle in scatter plot

转载 作者:行者123 更新时间:2023-12-02 17:32:48 25 4
gpt4 key购买 nike

我有一个散点图。现在,如果我单击其中一个点,如何生成一条穿过该点的线?

我被困在两个地方:

  1. 使用以下代码,为什么现在显示我的行?
    <!DOCTYPE html>
    <meta charset="utf-8">
    <body>
    <script src="d3.min.js"></script>
    <script>
    var width = 500, height = 500;
    var randomX=[], randomY=[];
    for (var i=0; i<=50; i++) {
    randomX[i] = Math.random()*400;
    randomY[i] = Math.random()*400;}<br/>
    var data = randomX.concat(randomY);
    var x = d3.scale.linear()
    .domain([0, d3.max(randomX)])
    .range([0, width]);<br/>
    var y = d3.scale.linear()
    .domain([0, d3.max(randomY)])
    .range([height, 0]);<br/>
    var svg = d3.select("body").append("svg")
    .attr("width", width)
    .attr("height", height)
    .append("g");<br/>
    svg.selectAll("scatter-dots")
    .data(randomY)
    .enter().append("svg:circle")
    .attr("cy", function(d) {return y(d); } )
    .attr("cx", function(d,i) {return x(randomX[i]); } )
    .style("fill", "brown")
    .attr("r", 5)
    .on("click", function(d,i) {
    d3.select(this)
    .append("svg:line")
    .attr("x1", 300).attr("y1", 300)
    .attr("x2", 50).attr("y2", 50)
    .style("stroke", "steelblue")
    .style("stroke-width", 3);
    });
    </script>
  2. 我点击的点的坐标存储在哪里?我试过this.cxthis.cy ,但他们都没有给我实际的坐标。

最佳答案

首先,您需要将 line 元素附加到顶级 SVG 或 g 元素,而不是 circle 元素,否则它不会被显示。因此,在您的点击处理程序中,您需要执行以下操作:

.on("click", function(d,i) {
svg.append("svg:line")
.attr("x1", 300).attr("y1", 300)
.attr("x2", 50).attr("y2", 50)
.style("stroke", "steelblue")
.style("stroke-width", 3);
});

您可以通过 d3.event 获取点击的坐标或圆本身的坐标,即

.on("click", function(d,i) {
var x = x(randomX[i]),
y = y(d);
});

甚至

.on("click", function(d,i) {
var x = d3.select(this).attr("cx"),
y = d3.select(this).attr("cy");
});

关于javascript - D3 : adding a line when clicking on a circle in scatter plot,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22915285/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com