javascript - 在 d3 中追加多个 'text' 元素

标签 javascript svg d3.js

我有一个图表,其中有一个元素出现在鼠标悬停时,附有一个圆圈、文本和一个 svg:line,如下所示:

    var focus = svg.append("g")
        .attr("class", "focus")
        .style("display", "none")

    var circleRadius = 4.5;

    focus.append("circle")
        .attr("r", circleRadius);

    focus.append("text")
        .attr("y", -9)
        .attr("x", 0)
        .style("text-anchor", "middle");

    focus.append("svg:line")
        .attr("x1", 0).attr("x2", 0) // vertical line so same value on each
        .attr("y1", circleRadius).attr("y2", 200); // top to bottom 

    /*focus.append("text")
        .attr("y", -2)
        .attr("x", -20);*/

我想添加第二个文本元素(当前被注释掉的那个)但是当我尝试这样做时它不会呈现第一个文本元素。有没有办法将多个相同类型的元素附加到一个组中?我还需要能够独立地选择它们(如下所示,我有两个 focus.select('text') 函数,一个用于每个文本元素,目前我无法区分它们)。

次要问题;第二个文本元素以完整格式显示时间字符串(例如 Thu Jun 26 2014 08:30:00 GMT-0600(山区标准时间))。我可以即时格式化它以获得小时/分钟/秒吗?目前文本元素从这段代码中获取数据:

        focus.select("text")
            .text(d.temperature)
            .attr("font-family", "NorWester")
            .attr("font-size", 11);
        focus.select("text")
            .text(d.time)
            .attr("y", function() { return (height - y(d.temperature)) })
            .attr("font-family", "NorWester")
            .attr("font-size", 11);

最佳答案

焦点是什么 SVG 元素?我认为必须是 g 才能处理多个 text 元素。

对于格式化,d3 有一个简洁的功能:

var format = d3.time.format('%H:%M');
// ...
focus.select('text').text(function(d) {return format(d.time);});

编辑:工作 jsfiddle 演示,显示组内的两个文本元素: jsfiddle.net/PRvGC/

关于javascript - 在 d3 中追加多个 'text' 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24566115/

相关文章:

iPhone iOS 5 更新后,JavaScript 子菜单不再起作用

javascript - 如何使用 Vanilla Js 进行切换

d3.js - Uncaught Error : unknown type: dragend in d3. js v5.4.0

d3.js - d3.时间刻度返回 NaN

javascript - D3 v4 - d3.zoom() 防止绑定(bind)某些事件,但在 Window 上除外

javascript - 将 promise 与失败串联起来

javascript - Bootstrap Modal-Manager 禁用溢出

javascript - 旋转嵌套 SVG

css - SVG图标继承文本颜色和大小

css - 是否可以对 svg 图像的线性渐变gradientTransform 属性进行动画处理