Javascript D3中的控制轴刻度编号
我试图用这段代码创建100多个图形,每一个都是唯一的图形并绘制不同的点。但是,我需要它们的总体布局看起来相同 使用.ticks()函数时,D3似乎完全忽略了我输入的任何值。我的每一张图表都会显示不同数量的刻度,但我找不到解决方法。有没有办法强迫D3接受我的价值 以下是相关代码:Javascript D3中的控制轴刻度编号,javascript,d3.js,Javascript,D3.js,我试图用这段代码创建100多个图形,每一个都是唯一的图形并绘制不同的点。但是,我需要它们的总体布局看起来相同 使用.ticks()函数时,D3似乎完全忽略了我输入的任何值。我的每一张图表都会显示不同数量的刻度,但我找不到解决方法。有没有办法强迫D3接受我的价值 以下是相关代码: var xAxis = d3.svg.axis() .orient("bottom") .scale(x) .ticks(10) .tickFormat(d3.format("d")) .tick
var xAxis = d3.svg.axis()
.orient("bottom")
.scale(x)
.ticks(10)
.tickFormat(d3.format("d"))
.tickSize(1);
var yAxis = d3.svg.axis()
.scale(y)
.orient("left")
.ticks(10)
.tickSize(1);
var yAxixObject = graph.append("g")
.call(yAxis)
.attr("transform", "translate("+ margin.left + "," + margin.top + ")");
var xAxisObject = graph.append("g")
.call(xAxis)
.attr("transform", "translate("+ margin.left + "," + (height + margin.top) + ")");
根据FernOfTheAndes的建议,我最终使用了.tickValues()函数。我刚刚添加了一个循环来创建一个数组以输入到.tickValues()。现在,不管所有数据有多大的不同,我的图表都有10个刻度 这是我的y轴的所有相关代码,分布在整个项目中:
var yAxis = d3.svg.axis()
.scale(y)
.orient("left")
.tickSize(1);
...
var ticksNum = 10;
var yAxisTicks = [];
var yDomain = [d3.min(data, function(d){return d.Level;}), d3.max(data, function(d){return d.Level;})];
y.domain(yDomain);
...
for (var i = 0; i < ticks; i++ ){
yAxisTicks.push((yDomain[1] - yDomain[0]) / (ticks - 1)* i + yDomain[0]);
}
yAxis.tickValues(yAxisTicks);
...
var yAxixObject = graph.append("g")
.call(yAxis)
.attr("transform", "translate("+ margin.left + "," + margin.top + ")");
var yAxis=d3.svg.axis()
.比例(y)
.东方(“左”)
.尺寸(1);
...
var ticksNum=10;
var yAxisTicks=[];
var yDomain=[d3.min(数据,函数(d){返回d.Level;}),d3.max(数据,函数(d){返回d.Level;})];
y、 域(yDomain);
...
对于(变量i=0;i 根据FernOfTheAndes的建议,我最终使用了.tickValues()函数。我刚刚添加了一个循环来创建一个数组以输入到.tickValues()。现在,不管所有数据有多大的不同,我的图表都有10个刻度
这是我的y轴的所有相关代码,分布在整个项目中:
var yAxis = d3.svg.axis()
.scale(y)
.orient("left")
.tickSize(1);
...
var ticksNum = 10;
var yAxisTicks = [];
var yDomain = [d3.min(data, function(d){return d.Level;}), d3.max(data, function(d){return d.Level;})];
y.domain(yDomain);
...
for (var i = 0; i < ticks; i++ ){
yAxisTicks.push((yDomain[1] - yDomain[0]) / (ticks - 1)* i + yDomain[0]);
}
yAxis.tickValues(yAxisTicks);
...
var yAxixObject = graph.append("g")
.call(yAxis)
.attr("transform", "translate("+ margin.left + "," + margin.top + ")");
var yAxis=d3.svg.axis()
.比例(y)
.东方(“左”)
.尺寸(1);
...
var ticksNum=10;
var yAxisTicks=[];
var yDomain=[d3.min(数据,函数(d){返回d.Level;}),d3.max(数据,函数(d){返回d.Level;})];
y、 域(yDomain);
...
对于(变量i=0;i
.tickValues([1,2,3,…])优先于axis.ticks…根据设置的tick参数。如果可行的话,你可以使用你想要显示的实际值。@FernOfTheAndes我已经研究过了,很遗憾,这不起作用,因为我的每个图都使用不同的值。如果你知道每个图的范围,你仍然可以得到一个统一数量的记号点来传递,否?@FernOfTheAndes虽然现在您提到了它,但我想知道是否可以使用max和min函数以及.tickValues()中的输入变量来创建适当的值。。。下次有机会我会试试这个。谢谢是的,我们刚刚交叉发布了…这是我在最后一条评论中的想法..tickValues([1,2,3,…])优先于axis设置的tick参数。ticks…根据。如果可行的话,你可以使用你想要显示的实际值。@FernOfTheAndes我已经研究过了,很遗憾,这不起作用,因为我的每个图都使用不同的值。如果你知道每个图的范围,你仍然可以得到一个统一数量的记号点来传递,否?@FernOfTheAndes虽然现在您提到了它,但我想知道是否可以使用max和min函数以及.tickValues()中的输入变量来创建适当的值。。。下次有机会我会试试这个。谢谢是的,我们刚刚交叉发布了…这是我在最后一条评论中的想法。小改进:当你计算yDomain时,你可以使用d3.extent而不是分别调用d3.min和d3.max。小改进:当你计算yDomain时,你可以使用d3.extent而不是分别调用d3.min和d3.max。