D3编码顺序
D3 Coding Order
我不清楚D3 代码必须编写的模式。
例如 在下面的代码片段中,如果我在创建 svg 元素后提到代码的第 3 部分(图表标题),我的图表不会不显示标题文本,但如果我在创建 svg 之前提到第 3 部分,它就可以正常工作。
为什么?
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<style>
circle.dimple-series-1{
fill: red;
}
h2{
color: black;
text-align: center;
font-family: monospace;
font-size: 20px;
}
</style>
<script src="http://d3js.org/d3.v3.min.js"></script>
<script src="http://dimplejs.org/dist/dimple.v2.0.0.min.js"></script>
<script type="text/javascript">
function draw(data) {
/*
D3.js setup code
*/
"use strict";
var margin = 75,
width = 1400 - margin,
height = 600 - margin;
/*TITLE*/
d3.select("body")
.append("h2").text("Goals by Year!");
/*Creating SVG*/
var svg = d3.select("body")
.append("svg")
.attr("width", width + margin)
.attr("height", height + margin)
.append('g')
.attr('class','chart');
/*
Dimple.js Chart construction code
*/
var myChart = new dimple.chart(svg, data);
var x = myChart.addTimeAxis("x", "year");
x.dateParseFormat="%Y"
x.tickFormat="%Y";
x.timeInterval= 4;
myChart.addMeasureAxis("y", "attendance");
myChart.addSeries(null, dimple.plot.line);
myChart.addSeries(null, dimple.plot.scatter);
myChart.draw();
};
</script>
</head>
<body>
<script type="text/javascript">
/*
Use D3 (not dimple.js) to load the TSV file
and pass the contents of it to the draw function
*/
d3.tsv("world_cup.tsv", draw);
</script>
</body>
</html>
您的标题未添加到 svg 中。您正在将标题 object 附加到 body。我认为一旦您添加了 SVG 它就不会出现的唯一原因是因为它是在 DOM 之后添加的,所以可能看不见?这取决于您的 CSS,但我很确定该元素仍会被添加。
在第一种情况下,您的 DOM 将如下所示:
<body>
<h2>Goals by Year!</h2>
<svg>
<... Dimple Stuff ...>
</svg>
</body>
在第二种情况下是这样的:
<body>
<svg>
<... Dimple Stuff ...>
</svg>
<h2>Goals by Year!</h2>
</body>
如果要将标题添加到 SVG 本身,则需要使用 SVG 形状,并且需要定位 SVG 而不是 body。例如:
var svg = d3.select("body")
.append("svg")
.attr("width", width + margin)
.attr("height", height + margin);
svg.append("text")
.attr("x", 100)
.attr("y", 100)
.style("fill", "black")
.text("Goals by Year!");
... Dimple Stuff
在这种情况下,您的 DOM 将如下所示:
<body>
<svg>
<text x=100 y=100 style="fill:black">Goals by Year!</text>
<... Dimple Stuff ...>
</svg>
</body>
编辑:删除注释。 Dimple 在 svg 中使用组似乎没问题。
我不清楚D3 代码必须编写的模式。
例如 在下面的代码片段中,如果我在创建 svg 元素后提到代码的第 3 部分(图表标题),我的图表不会不显示标题文本,但如果我在创建 svg 之前提到第 3 部分,它就可以正常工作。
为什么?
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<style>
circle.dimple-series-1{
fill: red;
}
h2{
color: black;
text-align: center;
font-family: monospace;
font-size: 20px;
}
</style>
<script src="http://d3js.org/d3.v3.min.js"></script>
<script src="http://dimplejs.org/dist/dimple.v2.0.0.min.js"></script>
<script type="text/javascript">
function draw(data) {
/*
D3.js setup code
*/
"use strict";
var margin = 75,
width = 1400 - margin,
height = 600 - margin;
/*TITLE*/
d3.select("body")
.append("h2").text("Goals by Year!");
/*Creating SVG*/
var svg = d3.select("body")
.append("svg")
.attr("width", width + margin)
.attr("height", height + margin)
.append('g')
.attr('class','chart');
/*
Dimple.js Chart construction code
*/
var myChart = new dimple.chart(svg, data);
var x = myChart.addTimeAxis("x", "year");
x.dateParseFormat="%Y"
x.tickFormat="%Y";
x.timeInterval= 4;
myChart.addMeasureAxis("y", "attendance");
myChart.addSeries(null, dimple.plot.line);
myChart.addSeries(null, dimple.plot.scatter);
myChart.draw();
};
</script>
</head>
<body>
<script type="text/javascript">
/*
Use D3 (not dimple.js) to load the TSV file
and pass the contents of it to the draw function
*/
d3.tsv("world_cup.tsv", draw);
</script>
</body>
</html>
您的标题未添加到 svg 中。您正在将标题 object 附加到 body。我认为一旦您添加了 SVG 它就不会出现的唯一原因是因为它是在 DOM 之后添加的,所以可能看不见?这取决于您的 CSS,但我很确定该元素仍会被添加。
在第一种情况下,您的 DOM 将如下所示:
<body>
<h2>Goals by Year!</h2>
<svg>
<... Dimple Stuff ...>
</svg>
</body>
在第二种情况下是这样的:
<body>
<svg>
<... Dimple Stuff ...>
</svg>
<h2>Goals by Year!</h2>
</body>
如果要将标题添加到 SVG 本身,则需要使用 SVG 形状,并且需要定位 SVG 而不是 body。例如:
var svg = d3.select("body")
.append("svg")
.attr("width", width + margin)
.attr("height", height + margin);
svg.append("text")
.attr("x", 100)
.attr("y", 100)
.style("fill", "black")
.text("Goals by Year!");
... Dimple Stuff
在这种情况下,您的 DOM 将如下所示:
<body>
<svg>
<text x=100 y=100 style="fill:black">Goals by Year!</text>
<... Dimple Stuff ...>
</svg>
</body>
编辑:删除注释。 Dimple 在 svg 中使用组似乎没问题。