2017-10-10 87 views
1

我已經使用d3.js版本3創建了散點圖。我想創建一個輸入框,並且我將通過的任何值,它應該更改水平位置根據那個價值線。如何通過輸入框中的值來動態添加行

var yScale = d3.scale.linear() 
    .range([0 + margin.top, height - margin.bottom]) 
    .domain([0, 100]); 
var lineChartY = yScale(100 - 60); 


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

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

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

var color = d3.scale.category10(); 

var xAxis = d3.svg.axis() 
    .scale(x) 
    .orient("bottom"); 

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

var y1Axis = d3.svg.axis() 
    .scale(y1) 
    .orient("right"); 

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


d3.tsv("data.tsv", function(error, data) { 
    if (error) throw error; 

    data.forEach(function(d) { 

    d.WTP = +d.WTP; 
    }); 

    svg.append('line') 
    .style('stroke', 'black') 
    .style('stroke-width', '2px') 
    .attr('x1', 40) 
    .attr('y1', lineChartY) 
    .attr('x2', 880) 
    .attr('y2', lineChartY) 
    .attr("transform", "translate(-40,0)") 

    svg.append("g") 
    .attr("class", "x axis") 
    .attr("transform", "translate(0," + height + ")") 
    .call(xAxis) 

}); 

我工作的鏈接http://plnkr.co/edit/skDaqPISgXARZyLoFAnb?p=preview

回答

0

您正在使用的數據集存儲在服務器上。有兩種方法我能想到的解決這個問題的:

  1. 添加後端代碼 - 有提交到某種後端(PHP,Perl中,的NodeJS)的一種形式,操縱然後將文件重新加載頁面。

  2. 你把你的數據集並格式化成一個javascript數組。這可能是最簡單的方法,但是,一旦重新加載頁面,將不會保存任何數據。

還有其他一些方法可以做到,但我可以想到,但是,它們都需要一定的工作量。如果是個人項目,我可能會創建自己的腳本來處理數據文件。如果它會被別人使用,我會建議重新設計一些。

我可能會將數據放入(插入您選擇的數據庫)並操作數據集。考慮項目的範圍和誰正在訪問它。

相關問題