我正在嘗試在圖表區域之外獲取圖表的圖例。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 canvas元素和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的變換/平移。寬度最終爲839像素433.223像素(不知道我明白這一點)。外部svg現在有一堆空間,因爲內置了保證金。
所以我試圖增加g的寬度,所以我可以把我的傳奇作爲孩子的g並將其移動到由邊距創建的空白區域。或者,我正在嘗試創建另一個g,它是第一個g的兄弟,然後我可以使用邊距創建的空白空間。
我無法上班,也不知道哪條路最好。
g元素沒有寬度和高度屬性,他們總是放大以包含他們的子女 –
您的第一條語句不會返回'svg',而是返回附加的'g'。這就是爲什麼你的傳奇語句嵌套在第一個下面的下一個g。 d3使用方法鏈接,所以調用.append()返回新的選擇。通過將您的svg創建語句分成兩個單獨的語句來修復,一個是創建'svg',另一個是爲您的圖表創建'g'。 –