2017-04-08 102 views
0

我一直在撞牆,試圖找出這一個。我通常可靠的Google-Fu讓我失望了。我在SO上發現的任何東西都沒有指出我正確的方向。會喜歡這個幫助。D3 y(數字)返回NaN

我正在構建分組條形圖。出於某種原因,即使我通過了一個數字,y(數字)也只會給我NaN。下面

代碼:

const data = [ 
    { 
    'provider': 'twitter', 
    'likes': 2362, 
    'comments': 107, 
    'shares': 1129 
    }, 
    { 
    'provider': 'facebook', 
    'likes': 2783, 
    'comments': 148, 
    'shares': 1069 
    }, 
    { 
    'provider': 'instagram', 
    'likes': 1878, 
    'comments': 101, 
    'shares': 1032 
    }, 
    { 
    'provider': 'tumblr', 
    'likes': 2965, 
    'comments': 147, 
    'shares': 1393 
    } 
] 

const margin = {top: 10, right: 10, bottom: 10, left: 10}, 
    width = 628 - margin.left - margin.right, 
    height = 300 - margin.top - margin.bottom 

const x0 = d3.scaleBand() 
    .rangeRound([0, width]) 
    .paddingInner(0.1) 

const x1 = d3.scaleBand() 
    .padding(0.1) 

const y = d3.scaleLinear() 
    .rangeRound([height, 0]) 

const keys = d3.keys(data[0]).filter((key) => (key !== 'provider')) 

console.log('keys ', keys) // keys ["likes","comments","shares"] 

data.forEach((d) => { 
    d.values = keys.map((name) => ({name: name, value: +d[name]})) 
}) 

x0.domain(data.map(d => d.provider)) 
x1.domain(keys).range([0, x0.bandwidth()]) 
y.domain(0, d3.max(data, (d) => (d3.max(d.values, (d) => (d.value))))) 

console.log('max', d3.max(data, (d) => (d3.max(d.values, (d) => (d.value))))) // max 2965 

const svg = d3.select('body').append('svg') 
    .attr('width', 628) 
    .attr('height', 300) 

const provider = svg.selectAll('.provider') 
    .data(data) 
    .enter().append('g') 
    .attr('class', d => 'provider-' + d.provider) 
    .attr('transform', d => `translate(${x0(d.provider)}, 0)`) 

provider.selectAll('rect') 
    .data(d => d.values) 
    .enter().append('rect') 
    .attr('width', x1.bandwidth()) 
    .attr('x', d => x1(d.name)) 
    .attr('y', d => { 
    console.log('d.value ', d.value) // d.value 2362 
    console.log('y(d.value) ', y(d.value)) // NaN 
    }) 
+0

'.rangeRound([身高,0])'你的意思'[0,高度]'這裏嗎? – kennytm

+0

也許吧。即使我換了它,我仍然得到NaN。 – robskidmore

回答

3

domain方法預期的數組:

y.domain([0, 
      d3.max(data, (d) => (d3.max(d.values, (d) => (d.value)))) 
      ])