У меня есть графический объект, который я хотел бы загрузить в качестве фона для моей визуализации d3 (или просто как svg
, что я могу добавить circle
элементов). Иллюстрация приведена в формате svg
. Я попытался загрузить его в файл html
таким образом, чтобы я мог добавить элементы (например, круги) к (или поверх) файла svg
или к div
, в котором он находится. Вот два Подходы, которые я пробовал:d3 - Добавить элементы во внешний файл SVG
<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>
Изображение svg прекрасно выглядит, но круг не отображается. В Firefox, то 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">
Я также попытался:
<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");
Опять же, SVG изображение выглядит прекрасно, но не круг не обнаруживается. В этом случае HTML показывает в браузере, как:
<object width="500" height="500" data="tba2.svg" type="image/svg">
#document
<svg version="1.1" xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="500px" height="500px" viewBox="0 0 250 250"
enable-background="new 0 0 250 250" xml:space="preserve"> … </svg>
</object>
У меня есть чувство, что это должно быть довольно просто сделать, но я не знаю. Любая помощь будет принята с благодарностью.
В первом примере вы не сообщили нам, как определяется 'svg'. Обратите внимание, что вам может потребоваться добавить пространство имен svg для любых добавляемых вами элементов (например, '.append (« svg: circle »)). –
Благодарим вас за ответ. В первом примере я явно не определял svg. Мое предположение заключалось в том, что, выполняя svg.append («круг»), код будет выбирать элемент svg изображения (который появляется в html из-за предыдущей строки). Как я могу сказать, чтобы использовать svg изображения? Кстати, если я открываю файл svg в текстовом редакторе и просто добавляю разметку с атрибутами cx, cy и открываю ее в браузере, круги выглядят отлично. Должен иметь способ добавить эти элементы d3, но я не знаю, как заставить его распознать SVG изображения. –
whistler
D3 не будет магически назначать переменные на основе того, что находится на странице. Вместо 'svg', попробуйте что-то вроде' d3.select ("svg") '. –