代码之家  ›  专栏  ›  技术社区  ›  user3837019

D3在缩放时更改X轴

  •  1
  • user3837019  · 技术社区  · 8 年前

    我正在尝试向条形图添加缩放功能。我试图实现的是,当用户将光标拖动到某个区域上时,您应该能够放大到该区域,并且x轴值会更改为显示当月的天数。遵循此示例 http://bl.ocks.org/godds/ec089a2cf3e06a2cd5fc 。我尝试使用相同的缩放和拖动功能。

    我似乎在更改x轴值时遇到了问题,因为我正在寻找一种方法,以便在选择特定区域时动态更改x轴。目前,当您放大条形图时,所有的位置都会改变,但我的x轴值保持不变(仍然显示月份数,而我想显示天数)。

    我的X轴代码:

    var xAxis = d3.svg.axis()
        .scale(x)
        .orient('bottom')
        .ticks(d3.time.month)
        .tickFormat(d3.time.format('%b %y'))
        .tickSize(0)
        .tickPadding(8); 
    

    我的画笔工具:

     function bListener(){
             x.domain(brush.empty() ? x.domain() : brush.extent());
                svg.select(".x axis").call(xAxis);
    
              svg.selectAll(".bar").attr("transform", function(d) { 
            console.log(d.date); 
            return "translate(" + x(new Date(d.date)) + ",0)"; 
    
            });
    }
    

    完整代码可在此处找到: http://jsfiddle.net/noobiecode/wck4ur9d/32/

    任何帮助都将不胜感激,因为我觉得自己随时都会头晕目眩。

    1 回复  |  直到 8 年前
        1
  •  1
  •   SiddP    8 年前

    代替

    svg.select(".x axis").call(xAxis);
    

    具有

     svg.select(".x.axis").call(xAxis);
    

    此外,最好有一个轴和域,用于将笔刷全部分开

    var x2 = d3.time.scale().range([0, width]);
    
    var brush = d3.svg.brush()
               .x(x2)
               .on('brush', bListener);
    x2.domain(x.domain());
    

    在bListener函数中

    x.domain(brush.empty() ? x2.domain() : brush.extent());
    

    已更新 : http://jsfiddle.net/wck4ur9d/33/

    注: