Html 选择(“svg”)-两个备选方案之间的差异
我对此有点困惑。我以为它们是等价的表达,但显然不是。下面是做饼图的一段代码的起始行。这很好,转换将图表移动到svg的中心Html 选择(“svg”)-两个备选方案之间的差异,html,d3.js,Html,D3.js,我对此有点困惑。我以为它们是等价的表达,但显然不是。下面是做饼图的一段代码的起始行。这很好,转换将图表移动到svg的中心 var width = 280, height = 200, radius = Math.min(width, height) / 2; var svg = d3.select("#pie") .select("svg") .attr("width", width) .attr("height", height) .appen
var width = 280,
height = 200,
radius = Math.min(width, height) / 2;
var svg = d3.select("#pie")
.select("svg")
.attr("width", width)
.attr("height", height)
.append("g")
.attr("transform", "translate(" + width / 2 + "," + height / 2 + ")");
然而,我试图将宽度
和高度
移到js代码之外的index.html文件中。下面的代码应该可以实现这一点,但我在这里遗漏了一些东西。图表以svg左上角为中心结束。作为一个饼图,你最终只能看到一个象限。我已仔细检查,并且宽度
和高度
都具有所需的值。这是html页面中的相关部分:
<div class="chart-stage" id="pie">
<svg width="280" height="200"></svg>
</div>
第一和第二代码块中的选择不同。在第一个
svg
中,svg指的是具有变换的g
元素的选择。在第二个svg
中,svg指的是svg
元素的选择。此svg
元素包含一个子g
和一个转换,但使用svg.append()
将向该g
添加一个同级:
var svg = d3.select("#pie")
.select("svg")
var width = +svg.attr("width"),
height = +svg.attr("height")
svg = svg.append("g")
.attr("transform", "translate(" + width / 2 + "," + height / 2 + ")");
这里的svg
是一个选中的g
元素
var svg = d3.select("#pie") // return a selection of the element with id pie
.select("svg"); // return a selection of the svg
此处的svg
是一个选定的svg
——一旦完成初始链接,后续操作:svg.attr().append()
不会更改变量的定义
要使第二个示例的结果与第一个示例相同,可以将svg
变量重新定义为子g
的选择:
var svg = d3.select("#pie")
.select("svg")
var width = +svg.attr("width"),
height = +svg.attr("height")
svg = svg.append("g")
.attr("transform", "translate(" + width / 2 + "," + height / 2 + ")");
尽管如此,将该变量称为
g
可能更清楚,因为它是g
的选择,而不是svg
选择svg
在每个示例中包含不同的内容。在第一个svg
中选择了g
作为。append(“g”)
返回一个包含新添加的g
的选择。在第二个示例中,svg
是对svg的选择(该svg恰好包含一个g
)。如果在第一个代码块中将内容附加到svg
,它将附加到转换后的g
,而在另一个代码块中,它通过附加到svg本身将兄弟项附加到转换后的g
。谢谢Andrew。我想我明白了,但不完全明白。因此,如果我用width=+d3.select(“#pie”).select(“svg”).attr(“width”)这样的值设置width/height,然后像第一段代码中所示的那样继续(当然忽略var width=280),因为我们刚刚设置了它,这是否合理?(虽然它可以工作…)我不确定是否完全遵循了注释-但是为了使第二个代码块的结果与第一个代码块的结果相同,您可以使用svg=svg.append(“g”).attr(“transform”),…
(无需使用svg.attr(“width”,width)。attr(“height”,height)设置svg的高度/宽度)
它们已经在svg元素的属性标记中设置好了)。这样,选择的svg
引用了g
元素,就像在第一个代码块中一样,任何附加了svg.append()
的内容都将作为该g
的子元素翻译到中心。当然,非常感谢!(嗯,我现在怎么接受这个答案?)
var svg = d3.select("#pie")
.select("svg")
var width = +svg.attr("width"),
height = +svg.attr("height")
svg = svg.append("g")
.attr("transform", "translate(" + width / 2 + "," + height / 2 + ")");