44

我正在使用(优秀的)D3.js 来生成一些绘图,但我找不到从 x 和 y 轴上移除结束刻度的方法。

以 y 轴为例。

当结束刻度值与标签一致时,我可以拥有它。

但是,当最后一个圆形标签低于绘图末尾时,我得到两个刻度,一个用于最后一个圆形标签,一个位于 y 轴末端的上方。

我不希望这个结束标记可见,因为我发现它出现的时间少于标签之间的常规间隔会分散注意力。

有关我所描述的示例,请参见此处,刻度为015是结束刻度:

15 ─┐ 
    | 
10 _| 
    |
5  _|
    |
0  ─┤──────

有小费吗?

PS 作为回应,我可以明确设置刻度。但我喜欢隐式生成刻度的便利性,只是不希望未标记的刻度污染轴。因此,理想的解决方案(如果存在)也会考虑在内。

4

8 回答 8

117

对于任何遇到这个问题的人,因为您要做的就是从轴上删除两个末端刻度,这将起到作用:

.outerTickSize(0)

将其添加到您进行的任何轴调用中,例如:

d3.svg.axis().outerTickSize(0)
于 2015-01-27T17:21:58.510 回答
20

这些axis.tick*功能可以帮助您。您有多种可能性来阻止您所描述的行为。tickValues()您可以使用该函数显式设置刻度。或者,您可以使用 将结束刻度的大小设置为 0 tickSize()。您还可以使用该ticks()功能控制基础规模。

根据您的特定情况,其中一个选项可能比其他选项更有意义。

于 2012-12-02T12:49:56.237 回答
10

在 d3.js v4.x 中使用.tickSizeOuter(0),例如:

self._leftAxis = d3.axisLeft(self._y)
      .tickSizeInner(3) // the inner ticks will be of size 3
      .tickSizeOuter(0); // the outer ones of 0 size

请注意,下面的零刻度被认为是内部

在此处输入图像描述

这个 d3.js v4 文档:https ://github.com/d3/d3-axis

于 2017-06-04T02:53:19.487 回答
8

如果您只想隐藏边界值并将隐式行为保持在中间,您可以SVG在绘制之后修改轴对象

说,在这里你绘制/更新你的轴:

g.selectAll(".x.axis").call(xAxis);

现在 g 将包含.tick分类对象。它们中的每一个都将引用一个刻度值。您可以选择它们并设置可见性属性:

d3.select(g.selectAll(".tick")[0][0]).attr("visibility","hidden");

d或者,您可以通过其值或索引来处理任何特定的报价i

g.selectAll(".tick")
    .each(function (d, i) {
        if ( d == 0 ) {
            this.remove();
        }
    });

不过要小心.remove()。有时第一个值已经被删除,它会在更新时删除第二个值。可见性隐藏更可靠。

归功于 d3-js 谷歌小组的 Ian & Denis https://groups.google.com/forum/#!topic/d3-js/LBxR_finiME

于 2014-05-25T09:36:34.207 回答
3

使用以下方式删除结束刻度:note tickSize(inner, outer)

var xAxis = d3.svg.axis().scale(x).
                tickSize(3, 0).orient("bottom").tickFormat( ... );

如果您在 tickSize(inner, outer) 中将外部参数设置为 0,您将不会获得外部刻度。

于 2014-06-12T15:36:02.600 回答
1

我不确定,外部刻度大小与轴的第一个或最后一个刻度有什么关系。


tickSize<line>实际上控制刻度组内元素的长度。因此,它处理<text>刻度元素与轴之间的距离从刻度位置开始的辅助线的长度,这取决于轴的方向和它被移动到的位置(通过 css translate())。

这是一个刻度组的样子:

<g transform="translate(10,0)" style="opacity: 1;" class="tick">
   <line x2="0" y2="-15"></line>
   <text x="0" y="-18" style="text-anchor: middle;" dy="0em">0.0</text>
</g>

现在您可以使用方法来控制元素的x2y2属性。在这里,我使用和作为 x 轴,它已移至图表底部。所以刻度的标签以一种非常混乱的方式投射到图表中。<line>tickSizetickSize(15, 0)orientation('top')

于 2015-12-15T07:39:45.093 回答
1

D3 v5.9.2 的工作解决方案:

  1. 声明yAxis并设置属性后,将其包装在 a 中g调用它:

     svg.append("g").attr("id", "yAxisG").call(yAxis);
    
  2. 从轴组中删除第一个<path>元素:

     d3.select("g#yAxisG").select("path").remove();
    
于 2019-05-13T16:17:14.243 回答
-2

只需删除两个轴:

d3.selectAll('.axis').remove();
于 2019-03-27T10:28:53.660 回答