我有一个图片,我想加载作为我的d3可视化的背景(或简单地作为svg
,我可以追加circle
元素)。插图采用svg
格式。我试图将其加载到我的html
文件中,这样我就可以将元素(例如圆圈)附加到svg
文件(或顶部)或{ {1}}它是在。我尝试了两种方法:
div
svg图像看起来很完美,但没有圆圈出现。在Firefox中,外部<script>
d3.xml("bal.svg", "image/svg+xml", function(xml) {
document.body.appendChild(xml.documentElement);
});
var circle = svg.append("circle")
.attr("cx", 100)
.attr("cy", 100)
.attr("r", 20)
.style("fill", "red");
</script>
文件的html
显示为:
svg
我也尝试过:
<svg version="1.1" xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="250px" height="250px" viewBox="0 0 250 250"
enable-background="new 0 0 250 250" xml:space="preserve">
同样,svg图像看起来非常精细,但没有圆圈出现。在这种情况下,html在浏览器中显示为:
<div id="htmlEmbed"></div>
<script>
d3.select("#htmlEmbed")
.append("object")
.attr("data", "tba2.svg")
.attr("width", 500)
.attr("height", 500)
.attr("type", "image/svg");
d3.select("#htmlEmbed")
.append("circle")
.attr("cx", 600)
.attr("cy", 600)
.attr("r", 20)
.style("fill", "red");
我觉得这应该是相当简单的,但我不知道。任何帮助将不胜感激。
答案 0 :(得分:9)
您尝试过的代码存在两个问题。首先,您需要正确定义svg
,其次,您需要执行在加载SVG后修改SVG的代码。由于d3.xml
的异步性质,情况并非如此。
所以你需要运行的代码就是这个。
d3.xml("http://openvz.org/images/1/17/Warning.svg", function(xml) {
document.body.appendChild(xml.documentElement);
var circle = d3.select("svg").append("circle")
.attr("cx", 100)
.attr("cy", 100)
.attr("r", 20)
.style("fill", "red");
});
工作小提琴(模数安全限制)here。