Я пытаюсь получить легенду о моем графике за пределами области диаграмм.d3.js Получить легенду Вне диаграммы
Вот поля:
var margin = {top: 50, right: 200, bottom: 50, left: 40};
var width = 960 - margin.left - margin.right,
height = 500 - margin.top - margin.bottom;
Сначала я создаю SVG:
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 + ")");
Таким образом, от моего понимания, я теперь есть элемент SVG холст и AG внутри него, который держит диаграмма. Я пытаюсь добавить больше к правильному краю, поэтому я могу получить некоторое пространство между холстом svg и g, добавленным к нему, которое содержит диаграмму. Затем я хочу поставить свою легенду в этом пустом месте.
Вот где я добавить свою легенду:
//add legend
var legend = svg.append("g")
.attr("class", "legend")
.attr("height", 300)
.attr("width", 200)
.attr("transform", "translate(-1000,50");
Хотя я и добавления к элементу SVG, то добавление к г в элементе SVG. Поэтому, независимо от того, насколько я переводил его или пытаюсь заставить его двигаться дальше по экрану, он никогда не проходит ширину внутреннего g.
При обнаружении неисправностей я вижу, что внешний элемент SVG имеет высоту 960 и ширину 500. Приложенная к ней g имеет преобразование/перевод 40,50. Ширина заканчивается 839px на 433.223px (не уверен, что я это понимаю). Внешний svg имеет кучу пространства прямо сейчас из-за встроенного поля.
Так что я пытаюсь либо увеличить ширину g, приложенную к svg, чтобы я мог поместить свою легенду в качестве ребенка из g и переместите его в пустое пространство, созданное маржем. Или, я пытаюсь создать еще один g, который является братом для первого g, а затем я могу использовать пустое пространство, созданное по краю.
Я не могу ни работать, ни знать, какой путь лучше.
g элементы не имеют атрибутов ширины и высоты, они всегда должны содержать своих детей. –
Ваш первый оператор не возвращает «svg», а вместо этого возвращает добавленный «g». Вот почему ваше заявление о легенде гнездится в следующем g под первым. d3 использует цепочку методов, поэтому вызов .append() возвращает новый выбор. Исправьте, разбив свой оператор создания svg на два отдельных оператора, один из которых создает «svg», а затем другой создает «g» для вашей диаграммы. –