【发布时间】:2015-01-19 03:47:37
【问题描述】:
我正在尝试构建一个条形图,我可以根据特定的时间长度在显示的数据量之间切换。到目前为止,我的代码是这样的,
var margin = {
top : 20,
right : 20,
bottom : 30,
left : 50
}, width = 960 - margin.left - margin.right, height = 500
- margin.top - margin.bottom;
var barGraph = function(json_data, type) {
if (type === 'month')
var barData = monthToArray(json_data);
else
var barData = dateToArray(json_data);
var y = d3.scale.linear().domain([ 0, Math.round(Math.max.apply(null,
Object.keys(barData).map(function(e) {
return barData[e]['Count']}))/100)*100 + 100]).range(
[ height, 0 ]);
var x = d3.scale.ordinal().rangeRoundBands([ 0, width ], .1)
.domain(d3.entries(barData).map(function(d) {
return barData[d.key].Date;
}));
var xAxis = d3.svg.axis().scale(x).orient("bottom");
var yAxis = d3.svg.axis().scale(y).orient("left");
var svg = d3.select("#chart").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 + ")");
svg.append("g").attr("class", "x axis").attr("transform",
"translate(0," + height + ")").call(xAxis);
svg.append("g").attr("class", "y axis").call(yAxis).append(
"text").attr("transform", "rotate(-90)").attr("y", 6)
.attr("dy", ".71em").style("text-anchor", "end").text(
"Total Hits");
svg.selectAll(".barComplete").data(d3.entries(barData)).enter()
.append("rect").attr("class", "barComplete").attr("x",
function(d) {
return x(barData[d.key].Date)
}).attr("width", x.rangeBand() / 2).attr("y",
function(d) {
return y(barData[d.key].Count);
}).attr("height", function(d) {
return height - y(barData[d.key].Count);
}).style("fill", "orange");
var bar = svg.selectAll(".barHits").data(d3.entries(barData))
.enter().append("rect").attr("class", "barHits").attr(
"x", function(d) {
return x(barData[d.key].Date) + x.rangeBand() / 2
}).attr("width", x.rangeBand() / 2).attr("y",
function(d) {
return y(barData[d.key].Count);
}).attr("height", function(d) {
return height - y(barData[d.key].Count);
}).style("fill", "red");
};
这很好地显示了我的原始数据集,我设置了一个按钮来在页面开头绘制的所有数据集之间切换。所有的数组都存在,但无论我多么努力,我都会继续向 div 添加一个新图,所以在单击按钮后我有两个图,我尝试使用 enter() 替换 div 中的所有代码 exit( ) remove() 函数,但是在使用这些函数时,我收到一条错误消息,指出没有 exit() 函数,我是通过关注其他人发布的 here 和另一个 here 的帖子得到的,但无济于事。有什么想法吗?
【问题讨论】:
-
你能创建小提琴,这样很容易修复它。
-
@ManjunathSiddappa jsfiddle.net/926e7upb/8/embedded/result 你去吧,我刚刚创建了这个小提琴希望这就是你想要的
标签: javascript d3.js