当前位置: 首页 > 知识库问答 >
问题:

堆栈图中选择条的X&Y坐标

苗运珧
2023-03-14

我有一个堆叠的条形图。我想画一条线,就像对堆叠的条形图的几个条形进行分组一样。

一些人请帮助绘制这些线使用D3。

JS:


var width = 750,
      height = 500;

  var x = d3.scale.ordinal()
            .rangeRoundBands([0, width], .1);

  var y = d3.scale.linear()
            .rangeRound([height, 0]);

  var color = d3.scale.ordinal()
                .range(["#D70B16", "#154CEF", "#1A8A55"]);

  var xAxis = d3.svg.axis()
                .scale(x)
                .orient("bottom");

  var yAxis = d3.svg.axis()
                .scale(y)
                .orient("left")
                .tickFormat(d3.format(".2s"));

  var tip = d3.tip()
            .attr('class', 'd3-tip')
            .offset([-10, 0])
            .html(function(d) {
            return "Value: " + (d.y1 - d.y0) + "";
            })

  var svgContainer = d3.select("body")
                        .append("svg")
                        .attr("width", width)
                        .attr("height", height)
                        .append("g")
                        .attr("transform", "translate(" + 30 + "," + 30 + ")");


  d3.csv("data.csv", function(error, data) {
    color.domain(d3.keys(data[0]).filter(function(key) { return key !== "circle"; }));

    data.forEach(function(d) {
      var y0 = 0;
      d.hours = color.domain().map(function(name) { return {name: name, y0: y0, y1: y0 += +d[name]}; });

      d3.select('body').append('pre')
              .text(JSON.stringify(d.hours, null, '  '));


      d.total = d.hours[d.hours.length - 1].y1;
    });

    x.domain(data.map(function(d) {return d.circle;}));
    y.domain([0, d3.max(data, function(d) {return d.total;})])

    svgContainer.append("g")
                .attr("class", "x axis")
                .attr("transform", "translate(0," + height + ")")
                .call(xAxis);

    svgContainer.append("g")
                .attr("class", "y axis")
                .call(yAxis)
                .append("text")
                .attr("transform", "rotate(-90)")
                .attr("y", 6)
                .attr("dy", ".71em")
                .style("text-anchor", "end")
                .text("Login Hours");

    var circle = svgContainer.selectAll(".circle")
                    .data(data)
                    .enter().append("g")
                    .attr("class", "g")
                    .attr("transform", function(d) { return "translate(" + x(d.circle) + ",0)"; });

    circle.selectAll("rect")
          .data(function(d) { return d.hours; })
          .enter()
          .append("rect")
          .attr("width", x.rangeBand())
          .attr("y", function(d) { return y(d.y1); })
          .attr("height", function(d) { return y(d.y0) - y(d.y1); })
          .on("mouseover", tip.show)
          .on("mouseout", tip.hide)
          .style("fill", function(d) { return color(d.name); });


    circle.selectAll("text")
          .data(function(d) { return d.hours; })
          .enter()
          .append("text")
          .attr("x", 75)
          .attr("y", function(d, i) { return y(d.y1) ; })
          .style("text-anchor", "middle")
          .text("test")

  })

共有1个答案

江阳夏
2023-03-14

如何确定这些值(和条形图)取决于如何识别它们。在这种情况下,您实际上不需要获取rect项,因为底层数据允许您访问所需的所有内容。

例如,若要获取第一列中第二条的Y坐标,可以使用以下代码:

var yCoord = y(data[0].hours[1].y1);
 类似资料:
  • #include <stdio.h> int func1(int a) { return 2 * a; } int func2(int a) { int c = 0; c = 2 * func1(a); return c; } int func3(int a) { int c = 0; c = 2

  • 问题内容: 有什么方法可以检查PNG图像的选定点(x,y)是否透明? 问题答案: 基于Jeff的答案,您的第一步将是创建PNG的画布表示。以下内容将创建一个屏幕外画布,该画布的宽度和高度与您的图像相同,并在其上绘制图像。 之后,当用户单击时,使用和获取位置。然后可以用来获取像素: 因为您只抓取一个像素,所以pixelData是一个包含四个像素的R,G,B和A值的四项数组。对于Alpha,任何小于2

  • 我有一张以色列地图。 我需要创建一个获得两个双参数(经度和纬度)的函数,该函数应该在地图图像中的那个区域上画一个小圆圈。 我有以下关于地图的信息: null 截图: https://gyazo.com/5a19dece37ebace496c6b8d68eb9ec3c

  • 我想知道这是否可以在Datadog中实现。我有一个在1个度量-现在数据通过多个标记发布到Datadog,例如,,可能还有10个不同的标签。 我试图在仪表板中创建Datadog图表,它将在堆叠条形图中显示实体计数的前5个标记。我知道添加更多查询的选项,但由于我不确定将来会有哪些实体可用,我希望datadog总是在仪表板中动态显示前5个实体(而不是在查询中指定要显示的标记)。这就是我目前拥有的(它完成

  • 注意:在 Photoshop CS6 中,3D 功能是 Photoshop Extended 的一部分。Photoshop Extended 中的所有功能是 Photoshop 的一部分。Photoshop 不提供单独的 Extended 版本。 关于图像堆栈 图像堆栈将一组参考帧相似、但品质或内容不同的图像组合在一起。将多个图像组合到堆栈中之后,您就可以对它们进行处理,生成一个复合视图,消除不需