【问题标题】:Tick marks on both sides of axis on d3 scaled3 刻度上轴两侧的刻度线
【发布时间】:2016-06-03 00:23:45
【问题描述】:

我试图让刻度线出现在 y 轴的两侧。如下所示,我可以根据长度-width 来扩展刻度线,它从起点从左到右绘制刻度线。

是否可以将刻度线的起点进一步向左移动?

我的意图是美学,但让刻度值直接超过刻度线的长度。

我设置了一个网格,由容器长度的刻度线组成:

// Axis
var xAxis = d3.svg.axis()
    .scale(x)
    .orient("bottom")
    .tickSize(-height);

var yAxis = d3.svg.axis()
    .scale(y)
    .orient("left")
    .tickSize(-width)
    .tickFormat(d3.format("s"));

基于这些尺度:

// Scale
var x = d3.time.scale()
    .range([0, width]);

var y = d3.scale.linear()
    .range([height, 0]);

我的轴像这样附加到 svg:

svg.append("g")
    .attr("class", "x axis")
    .attr("transform", "translate(0," + height + ")")
    .call(xAxis)
    .call(adjustXLabels);

svg.append("g")
    .attr("class", "y axis")
    .call(yAxis)
    .call(adjustYLabels);

【问题讨论】:

    标签: javascript d3.js svg


    【解决方案1】:

    我对你的追求有点困惑。您是否希望刻度标签与刻度本身重叠?如果是这样,您可以在绘制轴后选择文本,然后平移刻度。

    在这里查看小提琴:https://jsfiddle.net/6q3rpw6j/

    关键位是:

    svg.append("g")
        .attr("class", "y axis")
        .call(yAxis)
        .selectAll(".tick text")
        .attr("transform", "translate(15,0)");
    

    编辑

    要自己移动刻度:

    svg.append("g")
      .attr("class", "y axis")
      .call(yAxis)
      .selectAll(".tick line")
      .attr("transform", "translate(15,0)");
    

    要删除顶端和底端刻度,请确保设置 .outerTickSize(0)

    【讨论】:

    • 在您给出的小提琴示例中,转换会移动刻度标签。我正在寻找编辑刻度,以便刻度从 Y 轴双向延伸 - 而不仅仅是一个方向。这样就清楚了吗?如果没有,我可以添加图纸。
    • 可以像我在编辑中那样转换刻度线。在此处查看更新的小提琴:jsfiddle.net/Lgjot1oj/2
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-30
    • 1970-01-01
    • 1970-01-01
    • 2023-03-28
    • 2012-07-09
    • 2021-08-13
    相关资源
    最近更新 更多