Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/425.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript D3中的控制轴刻度编号_Javascript_D3.js - Fatal编程技术网

Javascript 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

我试图用这段代码创建100多个图形,每一个都是唯一的图形并绘制不同的点。但是,我需要它们的总体布局看起来相同

使用.ticks()函数时,D3似乎完全忽略了我输入的任何值。我的每一张图表都会显示不同数量的刻度,但我找不到解决方法。有没有办法强迫D3接受我的价值

以下是相关代码:

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。