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()。但我不担心轴刻度。我想删除由轴上的子记号形成的网格线。比尔,非常感谢你的帮助。