모든 내용을 표시하기 위해 d3/dagre-d3 svg 크기 조정
-
21-12-2019 - |
문제
다음을 사용하여 DAG를 만들려고 합니다. dagre-d3.이러한 DAG에 대한 데이터는 데이터베이스에서 제공되며 각 DAG마다 다르기 때문에 모든 노드와 가장자리를 그래프에 추가하기 전에 포함 svg를 제공할 너비/높이를 모릅니다.
그래서 이상적으로는 다음과 같이 부르겠습니다. d3.select("#svg1").resize_to_match_contents()
모든 노드와 가장자리를 추가한 후 모든 노드가 표시되고 svg가 너무 크지 않은지 확인하세요.물론 그런 기능은 없고, 어떻게 구현해야 할지 모르겠습니다.전화할 수 있다는 걸 알아요 d3.select("#svg1").attr("height", "10")
높이를 설정하고 싶지만 높이가 무엇인지 검색/계산하는 방법을 모릅니다. <g>
SVG 내부의 요소는 다음과 같습니다.
해결책
SVG의 내부 및 외부 크기는 다음을 사용하여 독립적으로 제어할 수 있습니다. 뷰박스 기인하다.찾는 것에 대해 이야기할 때 크기 g
요소가 없는 경우에만 의미가 있습니다. viewBox
정의되어 있고 다른 것은 없습니다 규모 어디서나 변신.
제가 제안하는 방법은 다음과 같습니다.
- 설정
width
/height
~의svg
요소에window.innerWidth
그리고window.innerHeight
, 또는 원하는 최대 크기로 확장할 수 있습니다. - 설정
viewBox
다음과 같은 속성을 부여합니다."0 0 100 100"
그런 다음 코드의 모든 스케일을 정의하여 도메인을 갖습니다.[0, 100]
.이렇게 하면 그래프가 수축하다 지정된 영역에 맞게.
또한 방법을 살펴보세요. nvd3
창 크기 조정을 처리합니다., 및 다음을 사용하여 크기 조정 시 SVG 요소 내부의 좌표계를 유지하는 방법 종횡비 보존.
웹페이지에서 수집한 내용에 따르면 darge-d3는 렌더링 크기를 명시적으로 제한하기 위한 레이아웃 옵션 설정을 허용하지 않으며 사용된 최대 크기를 반환하지 않습니다.그러나 다음을 사용할 수 있습니다. getBBox()
의 크기를 얻으려면 g
렌더링된 상자에서 viewBox
그렇게 단지 SVG에 맞거나 height
, width
SVG에서 g
1:1이지만 레이아웃이 깨질 수 있습니다.