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

d3-画n次线

孙佑运
2023-03-14

我有一条使用d3绘制的垂直线。假设我想像条形码一样重复一行几次。我该怎么做呢?

我知道这必须使用for来完成,但我不知道如何做。

建议将非常有用。

小提琴

这是代码:

var height = 500;
    var width = 500;

    var svgContianer = d3.select("body")
                        .append("svg")
                        .attr("width", width)
                        .attr("height", height)


    var line = svgContianer.append("line")
                            .attr("x1", 20)
                            .attr("x2", 20)
                            .attr("y1", 100)
                            .attr("y2", 0)
                            .attr("stroke", "#000")
                            .attr("stroke-width", 2)

提前感谢。

共有2个答案

孙福
2023-03-14

有比使用for循环更好的选择。但是,无论如何,给你

var height = 500;
var width = 500;
var count = 10, padding = 5;
var svgContianer = d3.select("body")
                        .append("svg")
                        .attr("width", width)
                        .attr("height", height)

for(var i = 0; i < count; ++i) {
    var line = svgContianer.append("line")
                            .attr("x1", padding*i)
                            .attr("x2", padding*i)
                            .attr("y1", 100)
                            .attr("y2", 0)
                            .attr("stroke", "#000")
                            .attr("stroke-width", 2)
}
隆功
2023-03-14

如果您想创建条形码,D3的方法是将每一行(元素)与其宽度(数据)绑定,然后使用D3的Enter阶段来构建它们。

此外,对于条形码,您还需要将形状渲染转换为crispEdges

演示。

var height = 500;
var width = 500;

var svgContianer = d3.select("body")
    .append("svg")
    .attr("width", width)
    .attr("height", height)


var line = svgContianer.selectAll("line")
    .data([1, 2, 1, 3, 2, 1, 3, 2, 1, 3, 2, 4, 3, 1, 2, 2, 2, 1, 3, 2])
    .enter()
    .append("line")
    .attr("x1", function (d, i) {
      return 20 + 5 * i;
    })
    .attr("x2", function (d, i) {
      return 20 + 5 * i;
    })
    .attr("y1", 100)
    .attr("y2", 0)
    .attr("stroke", "#000")
    .attr("stroke-width", function (d) {
      return d;
    })
 类似资料:
  • 问题内容: 因此,以某种方式(玩转),我发现自己使用了regex这样的正则表达式。 从逻辑上讲,对我来说,它应表示: (一个数字正好一次)正好两次,即一个数字正好两次。 但实际上,它似乎仅表示“一个数字仅一次”(因此忽略了)。 使用或相似,可以看到相似的结果。 为什么会这样?它是在regex / Java文档中的某个地方明确声明的,还是只是Java开发人员即时做出的决定,还是一个错误? 还是实际上

  • 我正在构建一个将事件呈现为D3图表的仪表板。比如一张D3气泡图;其中气泡大小是根据rest API上的kafka主题所消耗的事件来修改的。对于数据库数据源,我有类似的代码(使用异步xsjs调用);迭代SELECT语句以刷新数据;但我不清楚我是否可以对Kafka的rest调用使用同样的技术。 我希望将所有javascript代码嵌入到HTML页面中(为了简单起见),但我怀疑调用kafka rest服

  • 我想在D3中画一个棋盘: 我会满足于仅仅能够画出初始的游戏位置(如上)。 可能不需要king、queen、knight等的图像文件(有12个不同的部分),因为它们都是Unicode的一部分,作为代码点2654-265f: Unicode字符出现在任何现代浏览器中: 这是一个很好的例子 这是一个很好的例子 任何指示或帮助将非常感谢。

  • 我今天在开发人员工作面试中遇到了以下场景,这是其中一个问题,也是我唯一没有回答的问题。 将数字串联N次,然后在2017年前计算他的模数。 例如:对于N=5,数字为55555,结果为Mod(55555 2017)=1096;对于N=10,数字为10101010101010,结果Mod(101010101010102017)=1197 现在我要计算的数字是58184241583791680。我得到的唯

  • 问题内容: 在Perl中,我可以使用以下语法多次重复一个字符: 有没有简单的方法可以在Javascript中完成此操作?我显然可以使用一个函数,但是我想知道是否有任何内置方法或其他一些巧妙的技术。 问题答案: 如今,字符串方法几乎在所有地方都已实现。它不在InternetExplorer中。)因此,除非需要支持较旧的浏览器,否则只需编写以下内容: 在之前,我们使用了此技巧: (请注意,长度为11的

  • 我想把一个整数变成一个金字塔。一、 E数字3: 因此,根据我找到的答案,我做了如下: 但它不起作用,而且是次优的。有没有一种简单的方法可以在同一行中重复整数n次? 也不是很高兴,但似乎我不能只使用System.out.println(int x, int n次)