我尝试使用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')
感谢。
答案 0 :(得分:2)
您的代码中存在一些错误(嗯,一个半)。
首先,csv的签名调用了像
这样的用途d3.csv(file_name, function(data, error) {...
请注意,data
和error
在您的代码中相反。
其次,如果没有显示任何内容,则应首先输入回调函数,例如:
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/)。