使用D3.csv在DC.JS中加载CSV文件

时间:2015-05-30 11:55:18

标签: javascript csv d3.js dc.js

我尝试使用DC.js,但我无法使用external csv加载d3.csv

以下JSfiddle正在工作(没有external csv):http://jsfiddle.net/nicart/6k96mzta/1/

但是我无法调用csv spendData.csv(主持人:https://raw.githubusercontent.com/nicart/DC-js-chart/master/spendData.csv) 我尝试了一些代码,但我是JS的新手,对不起......我觉得这没关系,但什么都没发生。

d3.csv('https://raw.githubusercontent.com/nicart/DC-js-chart/master/spendData.csv', function(error, spendData) {
      spendData.forEach(function(d) {
       d.Spent = d.Spent.match(/\d+/);
      });  

是否有可能制作这样的东西?

var spendData = d3.csv('https://raw.githubusercontent.com/nicart/DC-js-chart/master/spendData.csv')

感谢。

2 个答案:

答案 0 :(得分:2)

您的代码中存在一些错误(嗯,一个半)。

首先,csv的签名调用了像

这样的用途
d3.csv(file_name, function(data, error) {...

请注意,dataerror在您的代码中相反。

其次,如果没有显示任何内容,则应首先输入回调函数,例如:

console.log(data);
console.log(error);

在线检查在特定浏览器中查看这些日志输出的正确方法。否则,调试Javascript是不可能的。

关于你的最后一个问题 - d3没有用于同步加载CSV(或任何其他格式)的API。当然,您不仅限于使用d3加载CSV,但还有其他原因 - 现代Javascript越来越远离这些东西,以便更好地提高页面响应能力。< / p>

答案 1 :(得分:2)

感谢Ami Tavory,我设法加载外部CSV。 我拉了

d3.csv("spendData.csv", function(error, spendData) {
    console.log(error);
    console.log(spendData);
// normalize/parse data
spendData.forEach(function(d) {

{之后,我添加了脚本的所有其余内容,因此它呈现如下:

d3.csv("spendData.csv", function(error, spendData) {
    console.log(error);
    console.log(spendData);
// normalize/parse data
spendData.forEach(function(d) {
    d.Spent = d.Spent.match(/\d+/);
});
// set crossfilter
var ndx = crossfilter(spendData),
    yearDim  = ndx.dimension(function(d) {return +d.Year;}),
    spendDim = ndx.dimension(function(d) {return Math.floor(d.Spent/10);}),
    nameDim  = ndx.dimension(function(d) {return d.Name;}),
    spendPerYear = yearDim.group().reduceSum(function(d) {return +d.Spent;}),
    spendPerName = nameDim.group().reduceSum(function(d) {return +d.Spent;}),
    spendHist    = spendDim.group().reduceCount();
yearRingChart
    .width(200).height(200)
    .dimension(yearDim)
    .group(spendPerYear)
    .innerRadius(50);
spendHistChart
    .width(300).height(200)
    .dimension(spendDim)
    .group(spendHist)
    .x(d3.scale.linear().domain([0,10]))
    .elasticY(true);
spendHistChart.xAxis().tickFormat(function(d) {return d*10}); // convert back to base unit
spendHistChart.yAxis().ticks(2);
spenderRowChart
    .width(350).height(200)
    .dimension(nameDim)
    .group(spendPerName)
    .elasticX(true);
dc.renderAll();            
});

我认为对于开发者来说这是一件蠢事,但对我来说很难理解。 我更新了Jsfiddle,但由于它是外部CSV,因此无法加载,但如果需要,您将获得完整的代码(http://jsfiddle.net/nicart/6k96mzta/3/)。