我正在尝试通过html滑块修改直方图布局的区域,但没有成功 我尝试为滑块运行的代码是:
<div id = "range">
<input type="range" min="1" max="50" step="1" value="25">
</div>
然后我将直方图的bins
设置为var bin
使用范围滑块的值更新bin的js代码:
d3.select("#range")
.select("input")
.on("change", function () {
this.value == bin;
//The two histogram variables, line and path generators
histogSans = d3 .layout.histogram()
.bins(bin)
.value(function (d) { return d.Peso; })
(FontSans);
histogSerif = d3 .layout.histogram()
.bins(bin)
.value(function (d) { return d.Peso; })
(FontSans);
line = d3.svg.line()
.x(function (d) { return x(d.x); })
.y(function (d) { return y(d.y); });
SansPath = svg
.transition()
.duration(1500)
.attr("d", line(histogSans));
});
histogSans
&amp; histogSerif
是直方图值的生成器,line
是行生成器,SansPath
&amp; SerifPath
是遵循直方图值的路径生成器。
编辑:感谢cuckovic我现在能够使用bin = this.value;
从滑块中获取正确的值,但直方图的控制台日志现在返回一个错误的数组,只包含一个数组数据集中的所有值,因此值未正确绘制!有谁知道为什么会这样?
完整代码:http://dl.dropboxusercontent.com/u/37967455/confronto_pesi.html
答案 0 :(得分:0)
答案 1 :(得分:0)
我设法让它更新轴和路径,主要问题是range value
未被识别为value
,所以在它前面放一个+解决了,加上其他一点点的东西。
如果有人有兴趣,这是代码:
d3.select("#range")
.select("input")
.on("change", function () {
bin = +this.value;
//Le due variabili di istogramma
histogSans = d3 .layout.histogram()
.bins(bin)
.value(function (d) { return d.Peso; })
(FontSans);
histogSerif = d3 .layout.histogram()
.bins(bin)
.value(function (d) { return d.Peso; })
(FontSerif);
MaxSans = d3.max(histogSans, function (d) { return d.y; });
MaxSerif = d3.max(histogSerif, function (d) { return d.y; });
y.domain([0, d3.max(dataset, function (d) {
if ( MaxSans >= MaxSerif )
{ return MaxSans; }
else { return MaxSerif; };
})]).nice();
console.log(MaxSans, MaxSerif);
gy .transition()
.duration(1000)
.call(yAxis);
line = d3.svg.line()
.interpolate("monotone")
.x(function (d) { return x(d.x); })
.y(function (d) { return y(d.y); });
SansPath
.transition()
.duration(500)
.attr("d", line(histogSans));
SerifPath
.transition()
.duration(500)
.attr("d", line(histogSerif));
});