2012-07-31 30 views
0

我创建了此jsbin http://jsbin.com/ibewux/3/edit以显示转换时的奇怪行为。D3 - 初始化后第一次转换时的问题

图表初始化时,它正确显示数据(请参见下面的表格)。

如果我尝试通过下拉菜单更改图表类型,则会交换一些系列;发生这种情况后,系列不再交换。

如果点击updateChartData按钮,会发生同样的事情;第一次将它与该表中显示的数据进行交换。

因此,似乎只有在初始化后的第一次转换受到这种不需要的交换。

这是一小段代码,不知道你是否可以发现这种情况发生的原因。

感谢

回答

2

isVerticalChart是真的,你使用的是带有域svg.pointsNames(这似乎是形式"Col " + i的字符串数组)的顺序量表:

x = d3.scale.ordinal().domain(svg.pointsNames); 

但是,你则去在这个尺度上使用基准索引,而不是这些字符串:

.attr("x", function(d, i) { return isVerticalChart ? x(i) : x(d.y0 - d.size); }) 

我想你应该通过一个str从域到这里的规模,以避免你看到的奇怪行为。

它只有工程此刻,因为如果您将密钥传递给之前没有见过的序号级别,它会将其添加到域中。

可能还有其他问题,但希望能让你更接近。

+0

谢谢杰森,这似乎解决了这个问题。我怎样才能用文本值(即列1,列2等)替换数字x标记(即0,1,2,3等)?谢谢 – Gian 2012-07-31 19:30:49

+0

对于轴?这应该在您设置axis.scale(x)时自动发生(它将使用序数比例的比例域)。您还可以使用axis.tickFormat设置自定义的tickFormat。如果您遇到特定问题,您应该打开一个新问题。理想情况下使用较短的示例代码。 :) – 2012-08-01 12:53:10

+0

谢谢。我故意留下所有的代码,希望它能对其他人有用。学习到教训了。 :-) – Gian 2012-08-01 14:49:48