【问题标题】:How does d3.js tell the difference between X-axis and Y-Axis?d3.js 如何区分 X 轴和 Y 轴?
【发布时间】:2016-05-31 10:39:42
【问题描述】:

所以我最近在学习 d3 并遇到一个小问题:当人们创建 x 轴和 y 轴时,如何从代码中判断哪个轴是先创建的?

例如:

          .......
          .......

        //Create scale functions
        var xScale = d3.scale.linear()
                             .domain([0, d3.max(dataset, function(d) { return d[0]; })])
                             .range([padding, w - padding * 2]);

        var yScale = d3.scale.linear()
                             .domain([0, d3.max(dataset, function(d) { return d[1]; })])
                             .range([h - padding, padding]);


          .......
          .......
        //Define X axis
        var xAxis = d3.svg.axis()
                          .scale(xScale)
                          .orient("bottom")
                          .ticks(5);

        //Define Y axis
        var yAxis = d3.svg.axis()
                          .scale(yScale)
                          .orient("left")
                          .ticks(5);


          .......
          .......

        //Create X axis
        svg.append("g")
            .attr("class", "axis")
            .attr("transform", "translate(0," + (h - padding) + ")")
            .call(xAxis);

        //Create Y axis
        svg.append("g")
            .attr("class", "axis")
            .attr("transform", "translate(" + padding + ",0)")
            .call(yAxis);

对于这段代码,我真的找不到创建 x 轴或 y 轴的区别吗?是因为转换功能吗?但是,当我删除 x 和 y 的变换函数时,x 回到顶部而 y 消失,到底发生了什么?有默认功能吗?

代码来源:http://alignedleft.com/content/03-tutorials/01-d3/160-axes/6.html by Scott Murray。

【问题讨论】:

    标签: javascript d3.js


    【解决方案1】:

    首先创建的轴是第一个调用的轴(使用 .call()),在本例中是 x 轴。轴的位置取决于方向和应用的变换。方向可以是“底部”、“顶部”、“左侧”或“右侧”。 bottom 和 top 指定水平轴,刻度分别位于轴的上方或下方,而 left 和 right 指定垂直轴,刻度分别位于轴的左侧或右侧。 d3 不知道哪个是 x 轴,哪个是 y 轴。它只知道有轴并将它们绘制到 .orient 和转换告诉它的位置。自然,人们倾向于将水平轴称为“xAxis”或类似的名称,但您可以将其称为“yAxis”,它仍会被绘制为水平轴。变换定位轴。因此,如果您删除 x 轴的转换,它将不再从顶部向下转换“h - padding”像素,而是出现在其容器的顶部。如果删除 y 轴的变换,它将被绘制在容器的 (0,0) 处,即左上角,并且会向上延伸但您将无法看到它,因为它会延伸到容器之外容器的可见区域。

    更多详情请看这里:https://github.com/mbostock/d3/wiki/SVG-Axes

    【讨论】:

    • 谢谢。所以我通过改变方向来测试它。成功了!
    猜你喜欢
    • 2021-02-05
    • 2014-07-07
    • 2021-12-28
    • 2022-12-19
    • 1970-01-01
    • 1970-01-01
    • 2016-12-27
    • 2016-02-01
    • 2020-07-01
    相关资源
    最近更新 更多