【发布时间】:2016-03-15 04:03:56
【问题描述】:
我计划从用户那里获得投票,并在折线图中显示过去三个月的结果。在接下来的几个月里,他们会点击“好”或“坏”的按钮。这是一些来自服务器的数据,我将尝试使其看起来像。
var results = {
"month1" : {"good" : 400,"bad" : 30} ,
"month2" : {"good" : 200, "bad" : 100},
"month3" : {"good" : 100, "bad" : 200}
};
我想我会得到一个类似 [370, 100, -100] 的数组,从坏中减去好。我想这些将是图表上的点,该线将通过。所以在“1 个月”(在 x 轴上),这条线将通过 370,在“2 个月”,这条线将通过 100,在“3 个月”,这条线将通过 -100。
- 我猜 y 轴应该从 -100 缩放到 370
- x 轴上应该有三个刻度
tickLabels = ["1 mo", "2 mo", "3 mo"]
这是我到目前为止所拥有的,我知道这不是很多,因为我很困惑。
var results = {
"month1" : {"good" : 400,"bad" : 30} ,
"month2" : {"good" : 200, "bad" : 100},
"month3" : {"good" : 100, "bad" : 200}
};
var arr = []
for(var key in results){
var obj = results[key];
arr.push(obj.good - obj.bad)
}
console.log(arr)
var margin = {top : 30, right : 20, bottom : 30, left: 50},
width = 600 - margin.left - margin.right,
height = 270 - margin.top - margin.bottom;
var x = d3.scale.linear().range([0, width])
var y = d3.scale.linear().range([height, 0]);
var tickLabels = ["1 mo", "2 mo", "3 mo"]
var xAxis = d3.svg.axis().scale(x).orient("bottom").tickFormat(function(d, i) { return tickLabels[i]})
var yAxis = d3.svg.axis().scale(y).orient("left").ticks(5)
我正在学习一些教程,下一部分是这样的:
var valueline = d3.svg.line()
.x(function(d) {return x(d.date); })
.y(function(d) {return y(d.close); });
我显然没有date 或close。我只是不知道如何将行生成器应用于我的数据。那么你能帮我用正确的刻度标签完成图表吗?1 mo 等?这将非常有帮助。
编辑 ::: 我会告诉你我现在拥有什么
看来我需要正确缩放 x 值以匹配轴
var results = {
"month1" : {"good" : 400,"bad" : 30} ,
"month2" : {"good" : 200, "bad" : 100},
"month3" : {"good" : 100, "bad" : 200}
};
var arr = []
for(var key in results){
var obj = results[key];
arr.push(obj.good - obj.bad)
}
console.log(arr)
var margin = {top : 30, right : 20, bottom : 30, left: 50},
width = 600 - margin.left - margin.right,
height = 270 - margin.top - margin.bottom;
var x = d3.scale.linear().range([0, width])
var y = d3.scale.linear().range([height, 0]);
var tickLabels = ["1 mo", "2 mo", "3 mo"]
var xAxis = d3.svg.axis().scale(x).orient("bottom").tickFormat(function(d, i) { return tickLabels[i]})
var yAxis = d3.svg.axis().scale(y).orient("left").ticks(5)
var valueline = d3.svg.line()
.x(function(d, i) {return x(i)})
.y(function(d) {return y(d)})
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 + ")")
y.domain([d3.min(arr, function(d) {return d} ), d3.max(arr, function(d) {return d} )])
svg.append("g").attr("class", "y axis").call(yAxis)
svg.append("g").attr("class", "x axis").call(xAxis).attr("transform", "translate(0," + height + ")")
svg.append("path").attr("d", valueline(arr)).style({"fill" : "none", "stroke" : "blue"})
<script src="http://d3js.org/d3.v3.js"></script>
【问题讨论】:
标签: javascript d3.js graph linechart