javascript - D3 V4 - 尝试绘制简单的折线图

标签 javascript d3.js charts

我正在努力在 D3 (V4) 中绘制简单的折线图...

我的数据如下所示,我相信它很好,因为我可以使用 d3.timeParse() 来解析日期,并且它们 console.log 很好:

var parseDate = d3.timeParse("%Y-%m-%d %H:%M:%S");

数据格式

            $myObj = (object)[];
            $myObj->name = $row['CH_FREQ'];
            $myObj->value = $row['RX_POWER'];
            $myObj->date = $row['CREATED_AT'];
            $chartData_RX_Down[] = $myObj;

例如:日期、名称、值 - 可能是:2017-03-22 12:20:02、名称、-0.2

大多数日期都是负数。

图表代码:

    // SA MAC Plot Chart - API Doco: http://devdocs.io/d3~4/
    function plotChart(data) {
        $('#chartContainer').empty();

        // Color Scale
        var magma = d3.scaleSequential(d3.interpolateMagma).domain([0,7]);


        // Set the Dimensions and Margins of the Graph
        var margin = {top: 20, right: 20, bottom: 40, left: 60},
            width = 580,
            height = 230;


        // x-Scale with Time Width
        var parseDate = d3.timeParse("%Y-%m-%d %H:%M:%S");      // D3 Expected Date Format
        var x = d3.scaleTime()
            .domain(d3.extent(data, function(d) { return parseDate(d.date); }))
            .range([0, width]);


        // y-Scale
        var y = d3.scaleLinear()
            .domain([0, d3.max(data, function(d) { return d.value; })])
            .range([height, 0]);



        // append the svg object to the body of the page
        // append a 'group' element to 'svg'
        // moves the 'group' element to the top left margin
        var svg = d3.select("#chartContainer").append("svg")
            .attr("width", "100%")
            .attr("height", "300px")
            .append("g")
            .attr("transform",
                "translate(" + margin.left + "," + margin.top + ")");




       // append the rectangles for the bar chart
        svg.selectAll("path")
            .data(data)
            .enter().append("path")
            .attr("x", function(d) { return d.date; })
            .attr("y", function(d) { return d.value; });



        // X-Axis
        svg.append("g")
            .attr("class", "axis_x")
            .attr("transform", "translate(0," + height + ")")
            .call(d3.axisBottom(x).tickPadding(5).tickSize(10));


        // Y-Axis
        svg.append("g")
            .attr("class", "axis_y")
            .call(d3.axisLeft(y).ticks(5).tickPadding(5).tickSize(10));


        // X-Axis Text
        svg.append("text")
            .attr("class", "d3_X_Axis_Text")
            .attr("x", 0)
            .attr("y", 0)
            .attr("fill", "white")
            .attr("transform", "translate(" + (width/2) + " ," + (height + margin.top + 20) + ")")
            .style("text-anchor", "middle")
            .text("Date Time");


        // Y-Axis Text
        svg.append("text")
            .attr("class", "d3_Y_Axis_Text")
            .attr("x", -130)
            .attr("y", -42.5)
            .attr("fill", "white")
            .attr("transform", "rotate(-90)")
            .style("text-anchor", "middle")
            .text("CM DownStream Bytes Received");
    }

我在屏幕上看到一个图表,其中包含日期 X 轴和数字 0 到 -6 Y 轴,因此 D3 正在工作并尝试显示图表 - 我只是没有看到任何数据/线条。

注意:我正在寻找折线图。

我认为该问题与以下代码有关:

       // append the rectangles for the bar chart
        svg.selectAll("path")
            .data(data)
            .enter().append("path")
            .attr("x", function(d) { return d.date; })
            .attr("y", function(d) { return d.value; });

我也尝试了以下方法:

        // append the rectangles for the bar chart
        svg.selectAll("path")
            .data(data)
            .enter().append("path")
            .attr("x", function(d) { return d.date; })
            .attr("y", function(d) { return d.value; });

任何帮助将不胜感激!!

干杯 亚当

最佳答案

SVG 路径元素没有 x 和 y 属性。您应该配置它的 d 属性(路径描述)。 请参阅此处 - developer.mozilla.org/en-US/docs/Web/SVG/Element/path

代码:

var valueline = d3.line()
    .x(function(d) { return x(d.date); })
    .y(function(d) { return y(d.value); });

 svg.selectAll("path")
      .data(data)
      .enter().append("path")
      .attr("class", "line")
      .attr("d", valueline);

关于javascript - D3 V4 - 尝试绘制简单的折线图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44405625/

相关文章:

javascript - IE 无法将 img 加载到 HTML

javascript - 在此网站上运行的交互式动画角色。这个怎么做?

javascript - 使用 ajax 传递输入名称

java - 电子邮件匹配正则表达式在java中花费很长时间,但在java脚本中计算速度很快

javascript - 如何向加载到 D3.js 的外部 SVG 添加缩放 + 拖动行为?

javascript - 混合图表中的顶点图表图表顺序

charts - Scrum 烧毁图表,它们会变成负数吗?

python - 从 Python 脚本在 Excel 中创建绘图

javascript - 如何使用 Plotly 格式化数字并将小数点向左增加?

javascript - D3 绘制零投影的经度/纬度