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

d3.js:访问数组内的对象属性创建线图

年凯康
2023-03-14

我试图使用D3.js创建一个具有以下数据结构的线图:


    var dataset1 = [ 
            {"video_name": "Apples", "video_views": 100},
            {"video_name": "Oranges", "video_views": 35},
            {"video_name": "Grapes", "video_views": 20},
            {"video_name": "Avocados", "video_views": 85},
            {"video_name": "Tomatoes", "video_views": 60}
        ]

对象的索引号是x值,“video_views”是y值。

问题:它正在追加svg画布,“g”元素很好,但是没有检测到图中每个点的x和y值,因此没有显示任何内容。


        // Scale values
    var Line_xScale = d3.scale.linear()
        .domain([0, 100])
        .range([0, Line_Graph_Width]);

    var Line_yScale = d3.scale.linear()
        .domain([0, 100])
        .range([0, Line_Graph_Height]);


    // This is where I suspect the problem is. //

    // SVG path equal to line
    var Path_Var = d3.svg.line()
        .x(function(d, i) {
            return i * 10;
        })
        .y(function(d) {
            return Line_yScale(d.video_views);
        });

    // Connect Element with Data
    group.selectAll('path')
        .data(dataset1)
        .enter()
        .append('path')
            .attr('d', Path_Var) 
            .attr('fill', 'none')
            .attr('stroke', '#fff')
            .attr('stroke-width', 2);

感谢任何帮助。多谢阅读。

共有1个答案

郜杰
2023-03-14

一个可能的解决方案:

对象的索引号是x值...:使用d3将x刻度的domain更改为输入索引数组。range():

// Scale values
var Line_xScale = d3.scale.linear()
    .domain(d3.range(dataset1.length))
    .range([0, Line_Graph_Width]);

...并且“video_views”是Y值。范围已更改,因此更大的值位于顶部:

var Line_yScale = d3.scale.linear()
    .domain([0, 100])
    .range([Line_Graph_Height, 0]);
var Path_Var = d3.svg.line()
    .x(function(d, i) {
        return i * Line_Graph_Width / dataset1.length;
    })
    .y(function(d) {
        return Line_yScale(d.video_views);
    });
group.append('path')
        .attr('d', Path_Var(dataset1)) 
        .attr('fill', 'none')
        .attr('stroke', '#000')
        .attr('stroke-width', 2);

#fff的stroke是白色的,所以即使一切正常,您也看不到任何东西。

参见jsbin中的示例。

使用group.selectall('path').data(dataset1).enter().append('path'),您不仅可以添加一个path,还可以添加dataset1.length路径元素。

 类似资料:
  • 问题内容: 首先看下面的JavaScript对象 我想将值设置为与相同,因此我将对象值放在前面,但它对我不起作用,我也使用过,但仍然失败。我的问题是如何访问对象内对象的属性。 一些用户沉迷于问“您想做什么或发送脚本等”,对于那些人来说,答案很简单:“我想访问对象内的对象属性”,上面提到了脚本。 任何帮助将不胜感激 :) 问题答案: 使用 对象文字 语法时,不能在初始化期间引用对象。创建对象后,需要

  • 我创建了一个对象数组,如下所示: 我正在尝试创建一个新数组,该数组过滤位置,使其仅包含不具有相同城市属性的对象(lat/lng重复项可以)。是否有内置的JS或Jquery函数来实现这一点?

  • 我有一个对象数组。它们中的每一个都具有与其他属性相同的属性,但值不同。我想访问这个数组中一个随机对象的属性,但只访问一次,所以当我随机获取该对象时,它将不再在数组中。 因此,我以三个对象作为数组的开始,并创建一个函数,该函数将通过单击按钮来调用。该函数创建2个变量-一个用于存储从Math.random()与数组长度的乘法中接收的随机数,并由Math.floor()取整。 第二个变量存储从数组中删除

  • 本文向大家介绍详解js访问对象的属性和方法,包括了详解js访问对象的属性和方法的使用技巧和注意事项,需要的朋友参考一下 对象的属性和方法统称为对象的成员。 访问对象的属性 在JavaScript中,可以使用“ . ”和“ [ ] ”来访问对象的属性。 二者区别:“ . ”表示法一般作为静态对象使用时来存取属性。而“[ ]”表示法在动态存取属性时就非常有用。 访问对象的方法 在JavaScript中

  • 我试图从一个Json文件中提取一个对象列表,但是该文件以一个对象开始,该对象包含我需要的对象数组。我是一个新的改造这里是我的文件:接口 控制器 Json的开头 我的对象Pojo 所以我不需要jsonObject中的任何初始信息,我所需要的只是元素jsonArray中的对象列表,它由两个稍微不同的对象组成,一个有nodes[],一个没有。因此POJO中有2个构造函数? 我如何设置改装来处理这件事?与

  • 本文向大家介绍浅谈JS使用[ ]来访问对象属性,包括了浅谈JS使用[ ]来访问对象属性的使用技巧和注意事项,需要的朋友参考一下 对象的属性由两种固定的方法来访问:”.”记法和”[ ]“方括号记法: 使用”.”号记法访问标准的对象属性,使用”[ ]“方括号记法访问由页面定义的对象属性。如下 document.forms["myformname"].elements["myinput"].value