2013-06-18 2 views
0

저는 시각화 작업을하고 있고 stackoverflow에서 찾은 jsfiddle을 사용하고 있습니다.D3 시각화 질문

나는 전에 D3을하지 않았기 때문에 몇 가지 질문이있었습니다.

내가 어떻게 그 텍스트와 원을하지 않는 보장 할 수 있습니다 내가 여기 jsfiddle에

http://jsfiddle.net/matthewpiatetsky/nCNyE/3/

  1. 을 일한지이

    {word:"cat", count: 30}, 
    {word:"dog", count: 15}.... 
    

    같은 일부 JSON을 시각화 할 교차? 이전 바이올린은 서클에 대해이를 보장했지만 한 서클의 레이블이 다른 서클/다른 레이블과 교차하지 못하도록하고 싶습니다.

  2. 창의 열린 공간의 크기에 비례하여 원 크기를 조절하려면 어떻게해야합니까? 나는 800 x 800 크기의 창을 만들 것이라고 생각하고 있습니다. 빈 공간이 많고 서클이 많으면 원을 더 크게 만들고 싶지 않습니다. 크기가 작아지기를 원합니다.

팁을 주시면 감사하겠습니다. (나는이 물건을 스스로 찾아 낼 수 있다는 것을 알고 있으며, 너무 천천히하고 있지만, 내가 할 수있는 이런 것들을하는 방법의 몇 가지 예가 도움이 될 것입니다!

+1

http://jsfiddle.net/JwQP6/3/ 이것은 원의 크기를 창 크기로 조절하는 방법입니다. jquery의'.height()'및'.width()'메서드를 사용하여 문서의 높이와 너비를 확인한 다음 각 원을 100으로 나눈 값 중 작은 쪽을 크기 조절합니다. – elsherbini

+0

감사합니다. 이것은 교차하기 때문에 내가 찾고 있었던 100 %가 아니지만 도움이됩니다. 그러나 나는 단지 원을 제거하고 그 단어를 시각화 할 수 있음을 깨달았다. 서클에서하는 것처럼 단어를 시각화하고 색상과 크기를 변경하는 방법을 알고 있습니까? 감사! 또는 다른 대안은 원의 중심에 텍스트를 넣는 것 같습니다 – Lemonio

+1

본 적이 있습니까? https://github.com/jasondavies/d3-cloud – elsherbini

답변

1

첫 번째 질문에 대한 짧은 대답은 D3에서 자동으로이 작업을 수행 할 수 없다는 것을 확인하십시오. 수동으로 레이블 및 원의 위치를 ​​확인하거나 D3의 강제 레이아웃과 같은 것을 사용하여 자동으로 중첩하지 않고 배치 할 수 있습니다. 그 옵션은 꽤 많은 작업이 될 것이고 두 번째 경우에는 아무 것도 겹치지 않을 것이라는 보장이 없을 것입니다.

두 번째 질문에 대해서는 창 크기를 결정하고 그에 따라 반경을 설정하십시오.

var radius = Math.sqrt(window.innerWidth * window.innerHeight)/100; 
+0

감사합니다. 두 가지 대답 모두 도움이되었지만, 100 % 내가 구하는 것이 아니 었습니다. 첫 번째 경우 노드에 대해서는 가능하지만 레이블에는 사용할 수 없습니까? 그렇다면 노드 내부에 레이블을 넣는 것이 가장 좋습니다. 두 번째 경우는 매우 멋지지만 실제로는 반경을 결정하여 창 크기를 기반으로하지 않고 다른 원의 총 반경을 기준으로 원을 사용하여 창을 채 웁니다 (각 원이 반경이 5 개인 원이 10 개인 경우). 반경이 10 인 100 개의 서클이있는 것보다 크다. – Lemonio

+0

D3에서 중복을 자동으로 피할 수있는 방법은 없습니다.그리고 두 번째 질문에 대해 귀하의 요인 (본 예에서는 100)을 해당 부서에 사용하기 전에 서클 수로 쉽게 곱할 수 있습니다. –

+0

덕분에 두 번째 아이디어가 좋습니다. 중첩을 방지하기 위해 사용되는 힘과 충전량이 아닙니까? 방금 힘이 제대로 작동하지 않도록 더 많은 텍스트를 추가 했으므로 반지름의 함수로 힘을 사용하는 방법을 알아 내려고 노력하고 있습니다 (일부 블로그에서는 이것을 보았지만 사용법을 알아 내지 못했습니다) 아직) 충전 : (d) -> - math.pow (d. radius, 2.0)/8 – Lemonio

관련 문제