javascript - 为什么我的 X(时间)轴上没有刻度?

标签 javascript d3.js

问题:

为什么我的 X(时间)轴 xAxis 上没有刻度?

<小时/>

代码:

 <script type="text/javascript">   
        d3.json("https://raw.githubusercontent.com/FreeCodeCamp/ProjectReferenceData/master/GDP-data.json", function(error, json) {
          if (error) {
              return console.warn(error);
          }
          visualizeIt(json);
        });

        function visualizeIt(data) {
            const dataset = data.data;

            const  margin = {
                top: 10,
                right: 6,
                bottom: 20,
                left: 70
            }

            const w = 900 - margin.left - margin.right;
            const h = 500 - margin.top - margin.bottom;
            const barWidth = Math.ceil(w / dataset.length);
            const format = d3.timeFormat("%Y-%m");

            const  mindate = dataset[0][0];
            const  maxdate = dataset[274][0];

            const xScale = d3.scaleTime()
                .domain([mindate, maxdate])    
                .range([0, w]);   

            const yScale = d3.scaleLinear()
                .domain([0, d3.max(dataset, (d) => d[1])])
                .range([h, 0]);

            const xAxis = d3.axisBottom(xScale);

            const yAxis = d3.axisLeft(yScale)

            const svg = d3.select("#results")
                .append("svg")
                .attr("width",  w + margin.left + margin.right)
                .attr("height", h + margin.top + margin.bottom);


            svg.append("g")
               .attr("transform", "translate(50," + (h+margin.top) + ")")
               .call(xAxis);

            svg.append("g")
               .attr("transform", "translate(50," + margin.top + ")")
               .call(yAxis);

            svg.selectAll("rect")
               .data(dataset)
               .enter()
               .append("rect")
               .attr("x", (d,i) => 50+barWidth*i)
               .attr("y", (d, i) => yScale(d[1]) + margin.top)
               .attr("width", barWidth)
               .attr("height", (d, i) => h - yScale(d[1]))
               .attr("fill", "navy")
               .attr("class", "bar");

        }

    </script>

最佳答案

您的代码中存在一些问题,但我将仅解决与 x 轴刻度相关的问题:

  1. 您想要解析字符串并返回日期,而不是相反。因此,您的 conts format 应使用 timeParse,而不是使用 timeFormat:

    const format = d3.timeParse(specifier) 
    
  2. 这给我们带来了第二个问题:const 格式 中的说明符是错误的。您在这里缺少 %d,即日期,因为您的字符串如下所示:"1947-01-01"。所以,应该是:

    const format = d3.timeParse("%Y-%m-%d")
    
  3. 您必须在日期中使用解析器:

    const  mindate = format(dataset[0][0]); 
    

    maxdate 执行相同的操作。

这是您更新的 CodePen:https://codepen.io/anon/pen/GmjRzY?editors=1010

关于javascript - 为什么我的 X(时间)轴上没有刻度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43577945/

相关文章:

javascript - 在图像上覆盖 div,不知道图像/容器 div 的高度

javascript - 使用 AngularJS 创建一个简单的 ToDo 应用程序,显示 $controller :ctrlreg error

javascript - 如何在 map 上使用 d3fc-label-label.js?

javascript - 缩放d3 v4映射以适合SVG(或完全适合)

javascript - 用户或管理员尚未同意使用该应用程序 - 为此用户和资源发送交互式授权请求

javascript - 已解决 : How to check multiple email addresses in dynamic fields to check if user already exists or not

javascript - 笔记功能、换行符和无内容

d3.js - 如何使用 d3 将一些标签移动到另一个标签内?

javascript - d3 - 通过圆弧边缘计算元素的位置和旋转

javascript - d3.js 中的独立元素。是否需要数组?