我遇到了一个看起来很容易解决的问题,但我就是无法让它正常工作——肯定哪里有一个愚蠢的错误我找不到。或许其他人能够找到问题所在?
我试图将JSON数据文件加载到nvd3图表中,但它没有显示。
当硬编码数据时,没有问题,但只要尝试从外部文件获取相同的数据,就会出现问题。
使用硬编码数据的工作版本:http://jsfiddle.net/Marei/1azqmx1L/14/
未 能正常工作的版本(使用外部文件):http://jsfiddle.net/Marei/38e53cz0/
d3.json('http://www.kato-media.de/transfer/data.json', function(data) {
nv.addGraph(function() {
var maxY = d3.max(d3.merge(data.map(function(d){return d.values})),
function(d) {return d.rank});
var chart = nv.models.lineChart()
.x(function(d) {return d3.time.format("%Y%m%d").parse(d.date) })
.y(function(d) {return d.rank})
.yDomain([maxY+1,0]) //Inverts y-axis
.color(d3.scale.category10().range())
.useInteractiveGuideline(true)
.margin({left: 100})
.margin({right: 50})
.margin({bottom: 100})
;
chart.options({
noData: "Not enough data to graph",
rightAlignYAxis: false,
});
//Map all xValues for each dataset to an array (tmp) --- To make sure all x-axis ticks have a label
var tmp = data.map(function(e) {
return e.values.map(function(d) {
return d3.time.format('%Y%m%d').parse(d.date);
});
});
//And flatten out that array, so you have all your xValues in a 1D-array
var xValues = [].concat.apply([], tmp);
chart.legend.margin({top: 10, right:60, left:80, bottom: 50});
chart.xAxis
.tickFormat(function(d) {return d3.time.format('%Y-%m-%d')(new Date(d)) })
.rotateLabels(-45)
.tickValues(xValues)
.showMaxMin(false)
;
chart.xScale(d3.time.scale()); //fixes misalignment of timescale with line graph
chart.yAxis
.axisLabel('Rank')
.tickFormat(d3.format('d'))
.showMaxMin(true)
.tickPadding(10);
;
d3.select('#chart svg')
.datum(data)
.transition().duration(500)
.call(chart)
;
nv.utils.windowResize(chart.update);
return chart;
});
链接到我的json文件:http://www.kato-media.de/transfer/data.json
也许有人可以花一分钟看看我的代码并帮我解决问题。非常感谢你的时间!