2014-01-09 3 views
1

보로 노이 지역과 관련된 도시 이름과 인구를 표시하고 싶습니다. 그러나 보 로노이 영역을 어떻게 만들었는지에 따라 좌표 데이터를 보내고 모든 도면을 작동 시키거나 더 많은 데이터를 보내야하며 보로 노이 영역 중 어느 것도 그려지지 않았습니다 (b/c, 좌표 데이터 및 적어도 배열 또는 개체 내에서 지정하는 방법을 모르겠다면, voronois를 만들 때). 툴팁에 대한 정적 데이터 또는 관련성없는 데이터를 입력 할 수 있습니다 (아래에서 설명했듯이).하지만 실제 데이터 셋의 데이터는 입력 할 수 없습니다.보로 노이 폴리곤 위로 가져갈 때 정보 표시 (D3.js에서)

var tooltip = d3.select("body") 
    .append("div") 
    .style("position", "absolute") 
    .style("z-index", "10") 
    .style("visibility", "hidden") 
    .text("a simple tooltip"); 

var voronoi = d3.geom.voronoi() 
     .clipExtent([[0, 0], [w, h]]); 

d3.csv("us-cities1.csv", function(d) { 
    return [projection([+d.lon, +d.lat])[0], projection([+d.lon, +d.lat])[1]]; 
     }, function(error, rows) { 
      vertices = rows; 
      drawV(vertices); 
      } 
     ); 

function polygon(d) { 
     return "M" + d.join("L") + "Z"; 
} 

function drawV(d) { 
    svg.append("g") 
     .selectAll("path") 
     .data(voronoi(d), polygon) 
    .enter().append("path") 
     .attr("class", "test") 
     .attr("d", polygon) 
     .attr("id", function(d, i){return i;}) 
     .on("mouseover", function(){return tooltip.style("visibility", "visible");}) 
     .on("mousemove", function(){return tooltip.style("top", (event.pageY-10)+"px").style("left",(event.pageX+10)+"px").text((this).id);}) 
     .on("mouseout", function(){return tooltip.style("visibility", "hidden");}); 

    svg.selectAll("circle") 
     .data(d) 
    .enter().append("circle") 
     .attr("class", "city") 
     .attr("transform", function(d) { return "translate(" + d + ")"; }) 
     .attr("r", 2); 
     } 
+0

당신은 (보로 노이에 대한 x와 y에 대한 접근 기능을 지정 ([여기] https://github.com/mbostock/d3/wiki/Voronoi-을 볼 수 있습니다 찾을 수 있습니다 Geom # wiki-x)). 이를 통해 좌표를 추출하는 f}을 지정할 수 있으며 다른 데이터를 가질 수 있습니다. –

+0

나는 분명히 그 구문을 어떻게 사용하는지 이해하지 못하고있다. 빠른 예제를 제공 할 수 있습니까? 내 데이터에는 "순위", "장소", "인구", "위도"및 "경도"헤더가 있습니다. 많은 변형을 시도했지만 가장 이해가가능한 것으로 생각되는 것은 다음과 같습니다. d3.csv ("us-cities1.csv", function (d) { \t svg.append ("g") .selectAll ("path") .data (voronoi.x (+ d.lon) .y (+ d.lat), polygon) .... – NickSilhacek

+0

작동해야하지만 마우스 오버 기능에서 추가해야합니다 마우스 오버 기능의 첫 번째 매개 변수로 자동 전달되는 데이터에 액세스하는 코드와 툴팁 텍스트를 설정하는 코드. 자습서 [here] (http://chimera.labs.oreilly.com/books/1230000000345/ch10. html # _binding_event_listeners) 웹에서 Scott Murray의 대화 형 데이터 시각화 – AmeliaBR

답변

2

데이터를 사용하여 Lars가 언급 한 것을 보여주는 예제를 작성했습니다.

var voronoi = d3.geom.voronoi() 
    .x(function(d) { return (d.coords[0]); }) 
    .y(function(d) { return (d.coords[1]); }); 

마이크에 의해이 Bl.ock에서 찍은 :이 같은 보로 노이에 대한 변수를 만들었습니다. 이렇게하면 좌표 배열을 지정하고 표시 할 설명 데이터에 연결되도록 할 수 있습니다. 난 그냥 다음 voronio 변수에 좌표 변환을 지정 있었다

cities.forEach(function (d,i) { 
    var element = { 
      coords: projection([+d.lon, +d.lat]), 
      place: d.place, 
      rank: d.rank, 
      population: d.population 
     }; 
    locCities.push(element); 
}); 

:

은 그때 사용 Voronio 다각형에 사용될 수있는 형식으로 모든 데이터를 저장하는 객체를 생성 변수는 cities이지만 사용하지 않았습니다.

제목 특성이 툴팁에 사용되었지만 코드에있는 것과 같이 더 적절한 것으로 대체 될 수 있습니다. 관련 코드 :

.append("title") // using titles instead of tooltips 
    .text(function (d,i) { return d.point.place + " ranked " + d.point.rank; }); 

데이터에 몇 가지 문제가 있습니다. geojson을 올바르게 렌더링하려면 d3 (3.1.5)의 이전 버전을 사용해야했습니다. Alberaua 프로젝션에 많은 수의 chnanges가 있었으므로 거기에 문제가 있음을주의하십시오.

일부 도시의 위치가 잘못되었습니다. 예를 들어 San Fancisco가 플로리다 어딘가에 나타납니다 (이로 인해 다소 혼란 스러웠습니다). 그래서 원래의 CSV 파일을 확인하고 거기에 좌표가 틀린 것처럼 보입니다. 그리고 데이터는 어디에서 렌더링되어야하는지 (레이블에 따라 예상되는 위치가 아님) 렌더링됩니다.

이제 모두 함께 넣어 당신은 here

+0

감사합니다! 나는 또한 동일한 [Bl.ock] (http://bl.ocks.org/mbostock/7608400)을 발견했다. 이는 voronoi .x 접근 자 함수를 지정하는 적절한 장소를 알려준다. 그것은 홀로 거대했습니다. 관련 데이터를 배열 스택에 밀어 넣는 방법은 깔끔하며 다른 데이터 세트의 정보를 우아하게 결합하는 방법으로 상상할 수 있습니다. – NickSilhacek