【问题标题】:D3 linechart, can't edit the amount of ticks with an ordinal scale?D3 折线图,无法编辑带有序数刻度的刻度数?
【发布时间】:2013-04-07 13:43:49
【问题描述】:

我之前问过一个关于 d3 的问题,他们建议我使用序数比例,这样可以解决我的问题。确实它解决了我的问题,但知道我遇到了另一个问题......

它画得很完美,但我的 X 轴上全是文字。 例如,我想要: 1900 1904 1908 1912 ... 但我得到了: 190119021903190419051906。如您所见,这并不清楚。 (这只是一个例子,如果只有日期,我可以使用另一个比例)。 我所到之处,他们都在谈论axis.ticks(number)。但这不起作用。什么也没发生,我仍然得到相同的结果。 我修改了一个结果以在 x 轴上获得更少的结果:

  var str = [];
  var i = 0;
  while(i < data.length) {
      str.push(data[i].age);
      i=i+8;
  }
  x.domain(str);

但如果我这样做,它会创建一条随机线并且不再完美地绘制它。不知道怎么解决..这是一个简单的折线图,没什么难的,唯一的困难(对我来说)是序数比例......

希望有人能帮帮我。

这就是我的 x 和 x 轴的定义方式:

var x = d3.scale.ordinal()
    .rangeRoundBands([0, width-150],1);

var xAxis = d3.svg.axis()
    .scale(x)
    .orient("bottom")

没有 while 循环(讨厌的 hack),我只有以下行定义 x.domain:

x.domain(data.map(function(d) { return d.age; }));

【问题讨论】:

    标签: javascript d3.js linechart ordinal


    【解决方案1】:

    查看the documentation for axes,尤其是ticks() 函数。您可以使用它(或tickValues())来控制要显示多少(以及什么)值。

    如果您使用日期,您可能希望使用time scale 而不是序数。特别是,它将允许您以更有意义的方式控制刻度,例如指定您希望每五年进行一次刻度。

    【讨论】:

    • 感谢您的反应,我会看一下文档,但正如我已经说过的,ticks() 函数不起作用。例如,我做了 ticks(),但仍然所有蜱虫都可见。就像我说的,1900 年、1901 年就是一个例子,如果只有日期,我确实会使用时间刻度......
    • TickValues() 确实解决了这个问题。我确实尝试过,但它没有用..不知道我当时做错了什么,但现在它正在工作。感谢您的快速回复。
    猜你喜欢
    • 1970-01-01
    • 2019-03-03
    • 1970-01-01
    • 1970-01-01
    • 2017-07-08
    • 1970-01-01
    • 2016-06-03
    • 2013-02-16
    • 2015-03-24
    相关资源
    最近更新 更多