2016-07-01 21 views
1

私は単純な折れ線グラフを作ろうとしました。 x軸に10,100,1000などの値が表示される なんらかの理由で、x軸の左側にすべての値が均等に軸上に積み重なる代わりに積まれます。D3のx軸の値が左側に積み重なっています

var data = [ 
    {views:10, odds: 56}, 
    {views:100, odds: 64}, 
    {views:1000, odds: 81}, 
    {views:10000, odds: 95}, 
    {views:100000, odds: 99}, 
    {views:1000000, odds: 99}, 
    {views:10000000, odds: 100}, 
]; 

// Set the dimensions of the canvas/graph 
var margin = {top: 30, right: 20, bottom: 30, left: 50}, 
    width = 600 - margin.left - margin.right, 
    height = 270 - margin.top - margin.bottom; 

// Set the ranges 
var x = d3.scale.linear() 
.domain([ 
    d3.min(data, function(d) { return d.views; }), 
    d3.max(data, function(d) { return d.views; }) 
]) 
.range([0, width]); 

var y = d3.scale.linear() 
.domain([ 
    d3.min(data, function(d) { return d.odds; }), 
    d3.max(data, function(d) { return d.odds; }) 
]) 
.range([height, 0]); 

// Define the axes 
var xAxis = d3.svg.axis().scale(x) 
    .orient("bottom").ticks(7) 
    .tickValues(data.map((d)=>{ return d.views; })); 

var yAxis = d3.svg.axis().scale(y) 
    .orient("left").ticks(7); 

// Define the line 
var valueline = d3.svg.line() 
    .x(function(d) { return x(d.views); }) 
    .y(function(d) { return y(d.odds); }); 

// Adds the svg canvas 
var svg = d3.select("body") 
    .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 valueline path. 
    svg.append("path") 
     .attr("class", "line") 
     .attr("d", valueline(data)); 

    // Add the X Axis 
    svg.append("g") 
     .attr("class", "x axis") 
     .attr("transform", "translate(0," + height + ")") 
     .call(xAxis); 

    // Add the Y Axis 
    svg.append("g") 
     .attr("class", "y axis") 
     .call(yAxis); 

https://jsfiddle.net/guy_l/77agq0hz/

答えて

2

これは正常な動作です。彼らは左側に積み重ねられていません。数学の問題です.xの各値は次の値のちょうど10%です!ドメインは10万から1000万になるので、ポイントは決して均等に拡散されません。ドメインの90%は6番目と7番目のポイントの間のスペースだけです。

あなたは序1のスケールを変更することができますか、あなたは定量的にそれを維持したい場合、あなたはここに対数スケール必要があります。

d3.scale.log(); 

を更新しフィドルを確認してください:https://jsfiddle.net/gerardofurtado/v17cpqdk/

+0

ありがとうございました。私の問題を解決した –

関連する問題