2017-07-19 20 views
-1

私のCSVファイルにいくつかの値があり、y軸の値とx軸の日付のグラフが表示されます。私は置く例として値d3.js x軸の日付範囲

date,close 
11-Jul-16,0.766705419439816 
15-Jul-16,0.7353651170975812 
17-Jul-16,0.41531502169603063 
19-Jul-16,0.5927871032351933 
21-Jul-16,0.7986419920511857 
23-Jul-16,0.7904979990272231 
25-Jul-16,0.817690401573838 
27-Jul-16,0.8433545168648027 
29-Jul-16,0.8612307965742473 
31-Jul-16,0.806498303188971 

しかし、第2グラフのx軸にすべての日付が含まれていません。..を次している私は2番目のグラフに値

date,close 
13-Jul-16,0.8736701869033555 
15-Jul-16,0.3631761567983922 
17-Jul-16,0.4795564555162078 
19-Jul-16,0.3754827857186281 
21-Jul-16,0.4355941951068847 
23-Jul-16,0.34393804366457353 
25-Jul-16,0.40967947088135176 
27-Jul-16,0.2707818657230363 
29-Jul-16,0.34430251610420176 
31-Jul-16,0.28089496856221585 

を以下している最初のグラフについては

私の出力グラフの印刷画面はここにmyoutputです。

これは、csvファイルからデータを取り出して視覚化する私のコードです。

var selectedMonth = document.getElementById( 'selectedMonth')。value; var selectedTopic = document.getElementById( 'selectedTopic')。値。

var userFileDirectory="../documents/"; 

userFileDirectory=userFileDirectory+selectedMonth+"/"+selectedTopic+"/"+"dataCs.csv"; 



// 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; 

// Parse the date/time 
var parseDate = d3.time.format("%d-%b-%y").parse; 
// Set the ranges 
var x = d3.time.scale().range([0, width]); 
var y = d3.scale.linear().range([height, 0]); 

// Define the axes 
var xAxis = d3.svg.axis().scale(x) 
    .orient("bottom").ticks(5); 

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

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

// 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 + ")"); 

// Get the data 
d3.csv(userFileDirectory, function(error, data) { 


    data.forEach(function(d) { 

     d.date = parseDate(d.date); 

     d.close = +d.close; 
    }); 

    // Scale the range of the data 
    x.domain(d3.extent(data, function(d) { return d.date; })); 


    y.domain([0, d3.max(data, function(d) { return d.close; })]); 

    // 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); 

    svg.append("text") 
     .text("("+selectedMonth+" "+selectedTopic+")"); 


}); 
+1

こんにちは、コード、特にスケール(ドメインと範囲)、軸と線の機能を確立する部分を共有してください。また、両方のチャートで同じスケール、軸、線の機能を使用していますか? –

+0

@TomShanley私の投稿を編集していただきありがとうございます。 – mstfky

答えて

0

私はtickValuesを使用して、明示的に目盛り値を設定しようとするだろう: https://github.com/d3/d3-3.x-api-reference/blob/master/SVG-Axes.md#tickValues

ティック(5)5つのティックを提案しますが、規模のドメインに基づいて適応されます。 tickValues()の代わりに、ダニ(d3.time.day、2)を2日ごとにチェックすることができます。

+0

あまりにもありがとうございました – mstfky

+0

私はy軸上の特定の点に線を描くことができますが、グラフの上に線があります。プレートを見つける。私の目標は閾値を測定することです。あなたは何か考えていますか? svg.append( "line")//行を添付します \t .style( "stroke"、 "red")//ラインに色を付けます \t .style( "stroke-dasharray"、( "2,2") ) \t .attr( "x1"、300)//行の最初の端のx位置 \t .attr( "y1"、0.4); //ラインの最初の端のyの位置 – mstfky

+0

これは新しい質問として尋ねられるべきです、トムを歓迎します –