D3.js 如何删除日志比例子项的网格线

D3.js 如何删除日志比例子项的网格线,d3.js,D3.js,我制作了一个对数比例的图形,背景中有网格线。网格线是为我要删除的子标记绘制的。有人知道怎么做吗。我也尝试过使用线性比例,但在对数图上看起来不太合适。请建议一些技巧。多谢各位 以下是指向图表图像的链接: 下面是我生成网格线的代码 function make_x_axis1() { return d3.svg.axis() .scale(x) .orient("bottom")

我制作了一个对数比例的图形,背景中有网格线。网格线是为我要删除的子标记绘制的。有人知道怎么做吗。我也尝试过使用线性比例,但在对数图上看起来不太合适。请建议一些技巧。多谢各位

以下是指向图表图像的链接:

下面是我生成网格线的代码

            function make_x_axis1() {
                return d3.svg.axis()
                .scale(x)
                .orient("bottom")
                .ticks(12)
                }

            function make_y_axis1() {
                return d3.svg.axis()
                .scale(y)
                .orient("left")
                .ticks(8)
                }
            svg1.append("g")
            .attr("class", "grid")
            .attr("transform", "translate(0," + height + ")")
            .call(make_x_axis1()
            .tickSize(-height, 0, 0)
            .tickFormat("")
            );

            svg1.append("g")
            .attr("class", "grid")
            .call(make_y_axis1()
            .tickSize(-width,0, 0)
            .tickFormat("")
            );

我想你要找的是你的
轴上的
.tickSubsection
设置。这里有很多例子。这似乎是您正在寻找的相关信息:

svg.append("g")
    .attr("class", "x minor endticks classical log_x")
    .attr("transform", "translate(0," + axis_y + ")")
    .call(d3.svg.axis().scale(log_x).tickSubdivide(example_subdiv_A(log_x))
      .tickSize(12, function(d, i) {
        return (2 * d.subindex == d.modulus ? 8 :
                ((5 * d.subindex == d.modulus) && (d.modulus >= 10) ? 6 :
                 ((d.subindex % 2 == 0) && (d.modulus > 10) ? 5 :
                  (d.modulus > 10 ? 2 : 4))));
      }, -10))
    .call(descr("classical logarithmic, with output-dependent # of subticks, emphasis on the 2nd and other even (but only when we have 10+ subticks!) and .5 subdiv, and longer start/end ticks"));

在这里,他不仅改变了子图标的数量,还改变了它们的大小。如果您根本不需要子项,可以将
tickSubdivide
设置为0以删除它们。如果你想让它们和轴上的记号一样,你需要使用
.tickSize
并做一些数学运算,分别设置主记号和次记号的记号大小。

我今天遇到了这个问题,找到了一个解决方案。我创建了一个函数来手动删除这些网格线。要删除的网格线是没有文本值的网格线

函数removeNoNameTicks(logAxisSelector){
var targetAxis=d3。选择(“g.x.axis”);
var gTicks=targetAxis.selectAll('.tick');
如果(gTicks.length>0&&gTicks[0]){
gTicks[0]。forEach(函数(项、索引){
//如果文本内容为“”,则查找文本
var textElement=d3.select(项目).select('text');
如果(textElement.html()=''){
项。删除();
}
});
}
}
我使用了.tickSubdivide()。但我不担心轴刻度。我想删除由轴上的子记号形成的网格线。比尔,非常感谢你的帮助。