0

我的数据是这样的: [{"month":1,"year":2013,"sumValue":60599.0,"countRecords":2976,"date":"2013-01-01T00:00:00"},{ "月":2,"年":2013,"sumValue":52922.0,"countRecords":2688,"日期":"2013-02-01T00:00:00"},{"月":3,"年":2013,"sumValue":62585.0,"countRecords":3072,"date":"2013-03-01T00:00:00"}]

代码片段

var x = d3.scale.linear().range([0, width + margin.left + margin.right]);
var x_extent = d3.extent(data, function (d) { return d.month });
x.domain(x_extent);
var xAxis = d3.svg.axis().scale(x).orient("bottom");
svgGroup.append("g").attr("class", "x axis").attr("transform", "translate(0," + height + ")") .call(xAxis);

我没有机会在 x 轴上获得 1 到 12 的值(下一步应该是显示月份的名称 - 但我该怎么做,如果我什至没有得到这些值)会是什么显示的是这样的东西(愚蠢):0.0 0.1 0.2.....

如果我尝试这个(在另一篇文章中提到):

d3.svg.axis().scale(x).ticks(d3.time.months, 1).tickFormat(d3.time.format("%b"));

什么都没有显示。

我想我缺少一些基本的理解。有人可以帮我解决这个问题吗?

提前致谢

©axi

4

1 回答 1

0

要使用时间刻度(这是您的第二个代码片段所建议的),您将不得不实例化刻度:

var x = d3.time.scale().range([0, width + margin.left + margin.right]);
var x_extent = d3.extent(data, function (d) { return new Date(d.date); });
x.domain(x_extent);

请注意,在这种情况下,您必须先将.date字符串转换为Dates(如 中所示d3.extent),然后再将它们传递给刻度。

于 2013-06-19T09:46:03.817 回答