【问题标题】:Static xAxis order using D3使用 D3 的静态 xAxis 顺序
【发布时间】:2014-08-29 02:33:03
【问题描述】:

我正在尝试在 muli 条形图上设置 x 轴的起点和终点。我可以渲染图表,但是它会根据对象中的日期按照收到的顺序绘制图表。如何重新排序 x 轴,以便从特定月份开始,如 5 月?

我喂 d3 的月份是 2 位数(01、02、03 等...)

    var chart = nv.models.multiBarChart();

    chart.xAxis
        .tickFormat(d3.format(',f'));

    chart.yAxis
        .tickFormat(d3.format(',.1f'));

    d3.select('#chart svg')
        .datum(data())
        .transition().duration(500)
        .call(chart)
        ;

    nv.utils.windowResize(chart.update);

    return chart;
});

【问题讨论】:

  • 您能否提供一些您一直在处理的代码Fiddle
  • 我用代码更新了我的问题。图表是根据键/值的排序方式绘制的。我希望从五月开始按顺序排列它们,而不是随机的。

标签: javascript d3.js nvd3.js


【解决方案1】:

NVD3 多条形图的 x 轴使用 d3 序数刻度。序数尺度的域(数据值)被定义为一个类别数组;轴按照它们在数组中出现的顺序使用这些类别。

如您所见,默认行为(如果未明确设置域)是按照每个新类别在数据中出现的顺序添加每个新类别。这就是 NVD3 使用的。

要对 x 轴类别进行排序,您有两种选择:

  1. 在将数据传递到图表之前对其进行排序。 This answer describes how to do that..

  2. 在使用 NVD3 图表对象的 .xDomain(array) 方法运行图表之前明确设置 x 域。

您传递给xDomain 方法的数组应该包含您需要的所有x 值,按照您想要的顺序排列。如果您确切知道类别是什么,您可以在程序中对其进行硬编码。更灵活的方法是从数据中生成它,通过使用array.map从每个数据对象中提取相关变量,然后使用array.sort以正确的顺序获取它们。

(您可以在排序前删除重复项 -- see this Q&A for examples of how -- 但这不是必需的。)

【讨论】:

  • 谢谢。我最终修复了日期服务器端,现在它们按时间顺序排列,但我需要让数组从 May 开始。我会给 .xDomain 一个机会。谢谢!
  • 在我的情况下,我最终在将日期传递到图表之前对日期进行了排序。不是最好的,但它有效。再次感谢。
猜你喜欢
  • 2016-04-15
  • 1970-01-01
  • 1970-01-01
  • 2021-07-28
  • 1970-01-01
  • 2010-12-02
  • 1970-01-01
  • 1970-01-01
  • 2012-08-01
相关资源
最近更新 更多