Tôi đang cố gắng truyền tải biểu đồ của mình bên ngoài khu vực biểu đồ.d3.js Nhận chú giải bên ngoài biểu đồ
Sau đây là các lề:
var margin = {top: 50, right: 200, bottom: 50, left: 40};
var width = 960 - margin.left - margin.right,
height = 500 - margin.top - margin.bottom;
Trước tiên tôi tạo ra 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 + ")");
Vì vậy, từ sự hiểu biết của tôi, tôi bây giờ có các yếu tố svg vải và ag bên trong của nó mà giữ đồ thị. Tôi đang cố gắng để thêm nhiều hơn vào lề bên phải, vì vậy tôi có thể nhận được một số không gian giữa vải svg và g nối thêm vào nó, giữ biểu đồ. Sau đó, tôi muốn đặt huyền thoại của mình vào khoảng trống đó.
Đây là nơi tôi thêm huyền thoại của tôi:
//add legend
var legend = svg.append("g")
.attr("class", "legend")
.attr("height", 300)
.attr("width", 200)
.attr("transform", "translate(-1000,50");
Mặc dù tôi đang phụ thêm vào các yếu tố SVG, nó được gắn thêm vào g bên trong phần tử svg. Vì vậy, không có vấn đề bao nhiêu tôi dịch nó hoặc cố gắng để có được nó để đi nhiều hơn ngay trên màn hình, nó không bao giờ đi qua chiều rộng của g bên trong.
Khi khắc phục sự cố, tôi thấy rằng phần tử SVG bên ngoài có chiều cao là 960 và chiều rộng là 500. G được nối thêm vào đó có chuyển đổi/dịch là 40,50. Chiều rộng kết thúc lên là 839px bởi 433.223px (không chắc chắn tôi hiểu điều này). Các svg bên ngoài có một bó của không gian ngay bây giờ vì các biên được xây dựng trong.
Vì vậy, tôi đang cố gắng để tăng chiều rộng của g nối vào svg vì vậy tôi có thể đặt huyền thoại của tôi như một đứa trẻ của g và di chuyển nó đến không gian trống được tạo ra bởi lề. Hoặc, tôi đang cố gắng tạo một g khác là anh chị em cho g đầu tiên và sau đó tôi có thể sử dụng khoảng trống được tạo bởi lề.
Tôi không thể làm việc và không biết cách nào là tốt nhất.
yếu tố g không có chiều rộng và chiều cao thuộc tính, họ alwaysautosize để chứa con cái của họ –
tuyên bố đầu tiên của bạn không trả lại 'svg' nhưng thay vì trả lại 'g' nối. Đó là lý do tại sao tuyên bố chú giải của bạn tổ chức g tiếp theo dưới đầu tiên. d3 sử dụng phương thức chaining để gọi .append() trả về lựa chọn mới. Sửa chữa bằng cách phá vỡ tuyên bố tạo svg của bạn thành hai câu lệnh riêng biệt, một tạo ra 'svg' và sau đó tạo một 'g' cho biểu đồ của bạn. –