Javascript gY=svg.append(“g”) .attr(“类”、“y轴”); 函数更新数据{ var s=document.getElementById; var fileName=s.value; d3.csv(文件名、类型、函数(错误、数据){ 如果(错误)
gY=svg.append(“g”) .attr(“类”、“y轴”); 函数更新数据{ var s=document.getElementById; var fileName=s.value; d3.csv(文件名、类型、函数(错误、数据){ 如果(错误)抛出错误; x、 域(data.map(函数(d){返回d.Letter;})); y、 域([(d3.min(数据,函数(d){return d.Value1;})-50),d3.max(数据,函数(d){return d.Value1;})]; gX.call(xAxis) .selectAll(“文本”) .style(“文本锚定”、“结束”) .attr(“dx”,“-.8em”) .attr(“dy”,“.15em”) .attr(“变换”、“旋转(-15)”); gY.呼叫(yAxis) //只添加一次标题 .selectAll(“.title”) .数据([“值1”]) .enter().append(“文本”).attr(“类”、“标题”) .attr(“变换”、“旋转(-90)”) .attr(“y”,6) .attr(“dy”,“.71em”) .style(“文本锚定”、“结束”) .文本(功能(d){ 返回d }); //一般更新模式 //更新 var bar=svg.selectAll(“.bar”) .数据(数据); //进入 bar.enter().insert(“rect”、“.axis”) .attr(“类别”、“酒吧”); //UPDATE+ENTER(调用ENTER()将ENTER合并到UPDATE中) attr(“x”,函数(d){return x(d.Letter);}) .attr(“宽度”,x.rangeBand()) .attr(“y”,函数(d){返回y(d.Value1);}) .attr(“高度”,函数(d){返回高度-y(d.Value1);}); //出口 bar.exit().remove(); }); 功能类型(d){ d、 Value1=+d.Value1; 返回d; } }Javascript gY=svg.append(“g”) .attr(“类”、“y轴”); 函数更新数据{ var s=document.getElementById; var fileName=s.value; d3.csv(文件名、类型、函数(错误、数据){ 如果(错误),javascript,jquery,html,d3.js,drop-down-menu,Javascript,Jquery,Html,D3.js,Drop Down Menu,gY=svg.append(“g”) .attr(“类”、“y轴”); 函数更新数据{ var s=document.getElementById; var fileName=s.value; d3.csv(文件名、类型、函数(错误、数据){ 如果(错误)抛出错误; x、 域(data.map(函数(d){返回d.Letter;})); y、 域([(d3.min(数据,函数(d){return d.Value1;})-50),d3.max(数据,函数(d){return d.Value1;})
感谢您强调我的错误并给出了精彩的回答。我同意使用通用更新模式更好+我删除了我的答案。对你很好@hhsadiq。这些东西有时会让人困惑,但关键是要记住,d3完全是数据驱动的,是声明性的,几乎从来都不是强制性的。
Letter,Value1,Value2
I,9968,8863
F,9938,9204
E,9875,8578
D,9859,9074
G,9856,9432
J,9778,9095
A,9729,8747
C,9695,8610
H,9609,8969
B,9508,9395
Letter,Value1,Value2
I,1510,1495
E,1521,1312
C,1624,1370
H,1669,1031
A,1685,1256
D,1773,1178
J,1910,1129
B,1981,1331
F,1982,1032
G,1986,1463
Letter,Value1,Value2
B,9516,9421
I,9537,9140
C,9772,9070
F,9527,9060
H,9747,8959
E,9992,8948
J,9576,8770
D,9748,8735
G,9963,8680
A,9557,8628
Letter,Value1,Value2
I,1708,1016
H,1604,1096
G,1689,1106
D,1657,1115
F,1709,1131
C,1588,1221
A,1939,1309
J,1600,1332
B,1815,1344
E,1651,1478
<!DOCTYPE html>
<meta charset="utf-8">
<html>
<style>
.bar {
fill: steelblue;
}
.bar:hover {
fill: brown;
}
.axis {
font: 10px sans-serif;
}
.axis path,
.axis line {
fill: none;
stroke: #000;
shape-rendering: crispEdges;
}
.x.axis path {
display: none;
}
select {
position: absolute;
top: 10px
}
</style>
<body>
<select id="flter" name="flter" onchange="updateData(this.id)">
<option value=""></option>
<option value="DataSet0.csv">DataSet0</option>
<option value="DataSet1.csv">DataSet1</option>
<option value="DataSet2.csv">DataSet2</option>
<option value="DataSet3.csv">DataSet3</option>
</select>
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.5.5/d3.min.js"></script>
<script>
var margin = {top: 60, right: 60, bottom: 90, left: 120},
width = 960 - margin.left - margin.right,
height = 700 - margin.top - margin.bottom;
var x = d3.scale.ordinal()
.rangeRoundBands([0, width], .1);
var y = d3.scale.linear()
.range([height, 0]);
var xAxis = d3.svg.axis()
.scale(x)
.orient("bottom");
var yAxis = d3.svg.axis()
.scale(y)
.orient("left")
.ticks(10, "$");
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.csv(fileName, type, function(error, data) {
if (error) throw error;
x.domain(data.map(function(d) { return d.Letter; }));
y.domain([(d3.min(data, function(d) { return d.Value1; }) - 50), d3.max(data, function(d) { return d.Value1; })]);
svg.append("g")
.attr("class", "x axis")
.attr("transform", "translate(0," + height + ")")
.call(xAxis)
.selectAll("text")
.style("text-anchor", "end")
.attr("dx", "-.8em")
.attr("dy", ".15em")
.attr("transform", "rotate(-15)" );
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("Value1");
svg.selectAll(".bar")
.data(data)
.enter().append("rect")
.attr("class", "bar")
.attr("x", function(d) { return x(d.Letter); })
.attr("width", x.rangeBand())
.attr("y", function(d) { return y(d.Value1); })
.attr("height", function(d) { return height - y(d.Value1); });
});
function updateData(s){
var s = document.getElementById(s);
var fileName = s.value;
d3.csv(fileName, type, function(error, data) {
if (error) throw error;
x.domain(data.map(function(d) { return d.Letter; }));
y.domain([(d3.min(data, function(d) { return d.Value1; }) - 50), d3.max(data, function(d) { return d.Value1; })]);
svg.append("g")
.attr("class", "x axis")
.attr("transform", "translate(0," + height + ")")
.call(xAxis)
.selectAll("text")
.style("text-anchor", "end")
.attr("dx", "-.8em")
.attr("dy", ".15em")
.attr("transform", "rotate(-15)" );
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("Value1");
svg.selectAll(".bar")
.data(data)
.enter().append("rect")
.attr("class", "bar")
.attr("x", function(d) { return x(d.Letter); })
.attr("width", x.rangeBand())
.attr("y", function(d) { return y(d.Value1); })
.attr("height", function(d) { return height - y(d.Value1); });
});
}
function type(d) {
d.Value1 = +d.Value1;
return d;
}
</script>
</body>
</html>
<!DOCTYPE html>
<meta charset="utf-8">
<html>
<style>
.bar {
fill: steelblue;
}
.bar:hover {
fill: brown;
}
.axis {
font: 10px sans-serif;
}
.axis path,
.axis line {
fill: none;
stroke: #000;
shape-rendering: crispEdges;
}
.x.axis path {
display: none;
}
select {
position: absolute;
top: 10px
}
</style>
<body>
<select id="flter" name="flter" onchange="updateData(this.id)">
<option value=""></option>
<option value="DataSet0.csv">DataSet0</option>
<option value="DataSet1.csv">DataSet1</option>
<option value="DataSet2.csv">DataSet2</option>
<option value="DataSet3.csv">DataSet3</option>
</select>
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.5.5/d3.min.js"></script>
<script>
var margin = {top: 60, right: 60, bottom: 90, left: 120},
width = 960 - margin.left - margin.right,
height = 700 - margin.top - margin.bottom,
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 + ")");
var x = d3.scale.ordinal()
.rangeRoundBands([0, width], .1, 0),
xAxis = d3.svg.axis()
.scale(x)
.orient("bottom"),
gX = svg.append("g")
.attr("class", "x axis")
.attr("transform", "translate(0," + height + ")");
var y = d3.scale.linear()
.range([height, 0]),
yAxis = d3.svg.axis()
.scale(y)
.orient("left")
.ticks(10, "$"),
gY = svg.append("g")
.attr("class", "y axis");
function updateData(s){
var s = document.getElementById(s);
var fileName = s.value;
d3.csv(fileName, type, function(error, data) {
if (error) throw error;
x.domain(data.map(function(d) { return d.Letter; }));
y.domain([(d3.min(data, function(d) { return d.Value1; }) - 50), d3.max(data, function(d) { return d.Value1; })]);
gX.call(xAxis)
.selectAll("text")
.style("text-anchor", "end")
.attr("dx", "-.8em")
.attr("dy", ".15em")
.attr("transform", "rotate(-15)" );
gY.call(yAxis)
// only add title once
.selectAll(".title")
.data(["Value1"])
.enter().append("text").attr("class", "title")
.attr("transform", "rotate(-90)")
.attr("y", 6)
.attr("dy", ".71em")
.style("text-anchor", "end")
.text(function(d){
return d
});
// GENERAL UPDATE PATTERN
// UPDATE
var bars = svg.selectAll(".bar")
.data(data);
// ENTER
bars.enter().insert("rect", ".axis")
.attr("class", "bar");
// UPDATE+ENTER (calling enter() merges enter into update)
bars.attr("x", function(d) { return x(d.Letter); })
.attr("width", x.rangeBand())
.attr("y", function(d) { return y(d.Value1); })
.attr("height", function(d) { return height - y(d.Value1); });
// EXIT
bars.exit().remove();
});
function type(d) {
d.Value1 = +d.Value1;
return d;
}
}
</script>
</body>
</html>