我使用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)
});
答案 0 :(得分:0)
您正在使用的数据集存储在服务器上。我可以通过两种方式来解决这个问题:
添加后端代码 - 有一个表单提交到某种后端(php,perl,NodeJS)并操作该文件然后重新加载页面。
您获取数据集并将其格式化为javascript数组。这可能是最简单的方法,但是,重新加载页面后,不会保存任何数据。
我可以想到其他几种方法,但是,它们都需要相当长的工作量。如果是个人项目,我可能只是创建自己的脚本来操纵数据文件。如果它将被其他人使用,我会建议进行某种重新设计。
我可能会将数据放入(插入您选择的数据库)并以这种方式操作数据集。考虑项目的范围以及访问它的人员。