2016-04-09 47 views
0

我無法讓邁克bostock代碼工作,因爲我繼續得到控制檯錯誤:Uncaught TypeError:y.domain不是函數。小倍數d3未捕獲y.domain沒有函數

我試過使用不同的d3.js版本,沒有任何作品。

我也像bostock示例一樣格式化了我的數據。

我很感謝在這個問題上的幫助,因爲我無法解決它。

謝謝。

var margin = {top: 8, right: 10, bottom: 2, left: 10}, 
    width = 960 - margin.left - margin.right, 
    height = 69 - margin.top - margin.bottom; 

var parseDate = d3.time.format("%b %Y").parse; 

var x = d3.time.scale() 
    .range([0, width]); 

var y = d3.scale.linear() 
    .range([height, 0]); 

var area = d3.svg.area() 
    .x(function(d) { return x(d.date); }) 
.y0(height) 
.y1(function(d) { return y(d.price); }); 

var line = d3.svg.line() 
    .x(function(d) { return x(d.date); }) 
    .y(function(d) { return y(d.price); }); 

d3.csv("data/year-cornTestSorted.csv", type, function(error, data) { 

    // Nest data by symbol. 
    var symbols = d3.nest() 
     .key(function(d) { return d.symbol; }) 
     .entries(data); 

    // Compute the maximum price per symbol, needed for the y-domain. 
    symbols.forEach(function(s) { 
    s.maxPrice = d3.max(s.values, function(d) { return d.price; }); 
    }); 

    // Compute the minimum and maximum date across symbols. 
    // We assume values are sorted by date. 
    x.domain([ 
     d3.min(symbols, function(s) { return s.values[0].date; }), 
     d3.max(symbols, function(s) { return s.values[s.values.length - 1].date; }) 
    ]); 

    // Add an SVG element for each symbol, with the desired dimensions and margin. 
    var svg = d3.select("body").selectAll("svg") 
     .data(symbols) 
     .enter().append("svg") 
     .attr("width", width + margin.left + margin.right) 
     .attr("height", height + margin.top + margin.bottom) 
     .append("g") 
     .attr("transform", "translate(" + margin.left + "," + margin.top + ")"); 

    // Add the area path elements. Note: the y-domain is set per element. 
    svg.append("path") 
     .attr("class", "area") 
     .attr("d", function(d) { y.domain([0, d.maxPrice]); return area(d.values); }); 

    // Add the line path elements. Note: the y-domain is set per element. 
    svg.append("path") 
     .attr("class", "line") 
     .attr("d", function(d) { y.domain([0, d.maxPrice]); return line(d.values); }); 

    // Add a small label for the symbol name. 
    svg.append("text") 
     .attr("x", width - 6) 
     .attr("y", height - 6) 
     .style("text-anchor", "end") 
     .text(function(d) { return d.key; }); 
}); 

function type(d) { 
    d.price = +d.price; 
    d.date = parseDate(d.date); 
    return d; 
} 
+0

你能'的console.log(數據);'它之後是加載? –

回答

0

您可以嘗試在上面設置下面的代碼。

x.domain([ 
    d3.min(symbols, function(s) { return s.values[0].date; }), 
    d3.max(symbols, function(s) { return s.values[s.values.length - 1].date; }) 
]); 

然後編寫函數來獲得最大價格。從內ATTR

y.domain([0, methodToGetMaxPrice()]; 

之後刪除所有語句(y.domain([0,d.maxPrice]

+0

不幸的是,沒有工作。我加載後的控制檯數據,看起來很好,也控制嵌套(符號)看起來很好,我試圖移動var y,var area和var line在d3.csv ){}函數,我擺脫了y.domain錯誤,但我得到一個錯誤:d3.js:8390 Uncaught TypeError:無法讀取未定義的屬性'長度',還:d3.js:670錯誤:無效值爲屬性...我也得到這個錯誤之前,但我認爲這是因爲y.domain錯誤。我很感激任何幫助,因爲我完全喪失了...非常感謝您 –

+0

您可以請仔細檢查這些值的類型,您是從csv獲得的。如果您爲* price *獲得字符串值,那麼您必須在此解析它。 – Pranab

+0

嗨Pranab,謝謝你的回覆。我已經用d.price = + d.price轉換了值,所以這不是問題,然後我認爲問題是負面數據...所以我嘗試了bostock的支持負值的條形圖代碼(只有一個圖不是小倍數...看到),並令我驚訝,我有同樣的問題未被捕獲的y.domain不是一個函數和錯誤。我不知道該怎麼做......任何幫助表示讚賞。 –

相關問題