首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >D3.js -在x轴上添加一个滴答值(日期格式)

D3.js -在x轴上添加一个滴答值(日期格式)
EN

Stack Overflow用户
提问于 2016-11-27 19:03:11
回答 1查看 964关注 0票数 0

我使用D3 (V4)创建了一个瀑布图,其中y轴有三个值(滴答)。

自动计算x轴的刻度值。

如何在x轴(日期值)上添加一个附加的滴答值(今天的日期)?

代码语言:javascript
复制
            function risklevels(d) {
                if (d <= 25 && d >= 13.5) {
                    return "High";
                } else if (d <= 13.5 && d > 7) {
                    return "Med";
                }
                return "Low";
            }  

           function drawWaterfall(){
                var margin = {top: 20, right: 20, bottom: 30, left: 50};
                var width = 800 - margin.left - margin.right;
                var height = 400 - margin.top - margin.bottom;

                dt = new Date();   
                var x = d3.scaleTime()
                          .rangeRound([0, width]);
                var y = d3.scaleLinear()
                          .rangeRound([height, 1]);

                var xAxis = d3.axisBottom(x);           

                var yAxis = d3.axisLeft(y).tickFormat(risklevels).tickValues([4, 10.25, 19.125]);

                var parseDate = d3.timeParse("%Y-%m-%d");

                var riskwaterfall = d3.select('#riskwaterfall').append('svg')
                                      .attr('width', width + margin.left + margin.right)
                                      .attr('height', height + margin.top + margin.bottom)
                                      .append('g')
                                      .attr('transform', 'translate('+margin.left+','+margin.top+')');


                riskwaterfall.append('rect')
                  .attr('class', 'high')
                  .attr("x", 0) // start rectangle on the good position
                  .attr("y", 0) // no vertical translate
                  .attr("width", width) // correct size
                  .attr("height", height*((25.0-13.5)/25.0) + height*0.5/25)
                  .attr("fill", "#ee0000"); // full height 

                riskwaterfall.append('rect')
                  .attr('class', 'high')
                  .attr("x", 0) // start rectangle on the good position
                  .attr("y", height*((25.0-13.5)/25.0) + height*0.5/25.0) // no vertical translate
                  .attr("width", width) // correct size
                  .attr("height", height*((13.5-7.0)/25.0) + height*0.5/25.0)
                  .attr("fill", "#eeee00"); // full height 

                riskwaterfall.append('rect')
                  .attr('class', 'high')
                  .attr("x", 0) // start rectangle on the good position
                  .attr("y", (25-7)*height/25 + height*0.5/25.0)// no vertical translate
                  .attr("width", width) // correct size
                  .attr("height", 7*height/25 - height*0.5/25.0)
                  .attr("fill", "#00ee00"); // full height


               var line = d3.line()
                    .curve(d3.curveStepAfter)
                    .x(function(d) { return x(d.date); })
                    .y(function(d) { return y(d.risk); });

               line('step-after');   

               risk.forEach(function(d) {
                    d.date = parseDate(d.date);
                    d.risk = +d.risk;  
                });

                x.domain(d3.extent(risk, function(d) { return d.date; }));
                y.domain(d3.extent(risk, function(d) { return d.risk; }));

                riskwaterfall.append('g')
                  .attr('class', 'x axis')
                  .attr('transform', 'translate(0,'+height+')')
                  .call(xAxis);



                riskwaterfall.append('g')
                  .attr('class', 'y axis')
                  .call(yAxis)
                  .append('text')
                  .attr('transform', 'rotate(-90)')
                  .attr('y', 6)
                  .attr('dy', '.71em')
                  .style('text-anchor', 'end');


                riskwaterfall.append('path')
                      .datum(risk)
                      .attr('d', line(risk));   

                for (var i = 0; i < risk.length; i++)
                    riskwaterfall.append('circle')
                             .datum(risk[i])
                             .attr("cx", function(d) { return x(d.date); })
                             .attr("cy", function(d) { return y(d.risk); })
                             .attr("stroke-width", "2px")
                             .attr("fill", "black" )
                             //.attr("fill-opacity", .5)
                             //.attr("visibility", "hidden")
                             .attr("r", 5);                                
               }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-28 00:58:56

现在,你正在为今天创造一个新的日期:

代码语言:javascript
复制
dt = new Date();

但这对x标度(轴生成器使用的)没有影响。因此,与其:

代码语言:javascript
复制
x.domain(d3.extent(risk, function(d) { return d.date; }));

它只会到达risk数据中的最大日期,它应该是:

代码语言:javascript
复制
x.domain([d3.min(risk, function(d) { return d.date; }), dt]);

在此之后,为了确保最后一个滴答出现,您可以在您的滴答值中使用nice()或在末尾域进行连接。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40832749

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档