Javascript Axis为大型域添加额外填充

Javascript Axis为大型域添加额外填充,javascript,html,d3.js,svg,data-visualization,Javascript,Html,D3.js,Svg,Data Visualization,在d3轴生成中出现了一个奇怪的情况。创建底部x轴时,使用为有序域值添加额外的填充,在轴中记号的起点和终点添加额外的填充。域中有更多值的情况 我猜,随着域项目的阈值数量的增加,滴答声的生成会逐渐减少 刻度以平均项目数均匀分布,一旦超过限制,它将在第一个和最后一个刻度上填充收缩 如能正确解释上述情况,将不胜感激 var宽度=400,高度=200; var svg=d3.选择(“主体”) .append(“svg”) .attr(“宽度”,宽度) .attr(“高度”,高度); var xaxisc

在d3轴生成中出现了一个奇怪的情况。创建底部x轴时,使用为有序域值添加额外的填充,在轴中记号的起点和终点添加额外的填充。域中有更多值的情况

我猜,随着域项目的阈值数量的增加,滴答声的生成会逐渐减少

刻度以平均项目数均匀分布,一旦超过限制,它将在第一个和最后一个刻度上填充收缩

如能正确解释上述情况,将不胜感激

var宽度=400,高度=200;
var svg=d3.选择(“主体”)
.append(“svg”)
.attr(“宽度”,宽度)
.attr(“高度”,高度);
var xaxiscale=d3.scaleBand()
.域名([1,3,5,7,8,10,12,13,14,15,16,17,18,19,20,22,23,24,25,26,27,28,29,30,31,32,33,34,36,37,39,40,41,43,45,46,47,48,49,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,69,70,71,72,73,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,95,98,99,105,106,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,127,128,129,130,131,135,136,141,154])
.rangeRound([10,宽度-10])
.填充(0.1);
var xAxisScale1=d3.scaleBand()
.域([1,3,5,7,8,10,12,13,14,15,16,17,18,19,20,22,23,24,25,26,27,28,29,30,31,32])
.rangeRound([10,宽度-10])
.填充(0.1);
var xAxis=d3.axisBottom(xaxiscale);
var xAxis1=d3.axisBottom(xaxiscale1);
svg.append(“g”).attr(“transform”、“translate(0,20)”).call(xAxis);
svg.append(“g”).attr(“transform”、“translate(0,60)”).call(xAxis1);

这里的罪魁祸首是
rangeRound
。这是预期的行为,并在以下章节中解释:

如果指定了圆,则启用或禁用舍入。如果启用舍入,则每个带的开始和停止都是整数。舍入有时可用于避免反走样伪影,但也可考虑形状渲染“CRISPEDGE”。样式。请注意,如果域的宽度不是范围基数的倍数,则可能会有剩余的未使用空间,即使没有填充!(强调我的)

因此,解决方案很简单:使用
range

var宽度=400,
高度=200;
var svg=d3.选择(“主体”)
.append(“svg”)
.attr(“宽度”,宽度)
.attr(“高度”,高度);
var xaxiscale=d3.scaleBand()
.域(d3.范围(200))
.范围([10,宽度-10])
var xAxisScale1=d3.scaleBand()
.域(d3.范围(20))
.范围([10,宽度-10])
var xAxis=d3.axisBottom(xaxiscale);
var xAxis1=d3.axisBottom(xaxiscale1);
svg.append(“g”).attr(“transform”、“translate(0,20)”).call(xAxis);
svg.append(“g”).attr(“transform”、“translate(0,60)”).call(xAxis1);

至于你答案的第一部分:这是行不通的,因为域中有大量不规则的洞。@altocumulus这是显而易见的。我没有试图复制OP的序列。而且,很明显OP只是想要一个大的数字序列……这就是我向他展示的方法。我尝试尽可能少的假设le关于OP可能想要什么。相反,你可以问为什么OP应该为了拥有很多数字而努力编造这样一个arrray。这种猜测导致了太多的挫折。一个问题中有足够的空间让作者明确表达自己。此外,你是s让我困惑从谈论
d3.range()
开始,以“使用
range
代替”结束。可能只有我一个人,但是,知道你的其他答案,我对这个答案不太满意。这并不意味着伤害,只是利用你作为教师的技能;-)@altocumulus因为“使用范围代替”中的“代替”提到rangeRound,我相信很明显这是scale.range,而不是d3.range。不过,为了清楚起见,我决定接受你的建议。只是出于好奇,为了解决@Gerardo和我之间的一个小争议,你介意分享一下这篇文章中的域值来自何处吗?是你自己编的还是他们的意思起源?