왜 아래 코드가 저에게 효과적이지 않은지 보지 못했습니다.y 축 스케일이 익명 함수 내에서 정의되지 않았습니다
참고 : 저는 D3 v4를 사용하고 있습니다. I는 별도 지정 경로 요소 y 축을 따라 배치된다 (즉, 맞춤 모양)을 작성하고자 displayData
의 각 요소
// DATA JOIN
var dataJoin = vis.svg.selectAll(".group")
.data(vis.displayData);
// ENTER + UPDATE
var group = dataJoin.enter().append("g")
.attr("class", "group");
group.append("path") // ENTER
.attr("class", "line")
.style("opacity", 0.5)
.merge(group) // ENTER + UPDATE
.transition()
.duration(800)
.attr("d", function(d) {
return vis.y(d.beginDate); <------- vis.y() is undefined
});
. 각 경로 요소는 y 축을 따라 적절한 지점에 경로 요소를 배치 할 수 있도록 vis.y() 배율을 사용해야합니다.
그러나, vis.y()는 .attr 함수 호출 내에서 정의되지 않습니다. 왜? 다른 버전의 D3 시각화를 구현했지만 (버전 3을 사용하고 있었음에도 불구하고) .attr 함수 호출의 내부에서 규모를 사용 했으므로 이제는이 문제가 발생하는 이유는 무엇입니까?
기본적으로 y 축의 다른 위치에서 시작되는 각 요소에 대한 사용자 지정 경로가있는 사용자 지정 셰이프를 추가하려고합니다. 내가 잘못된 방향으로 가고있는 것처럼 느껴지면 다른 제안을 해주십시오.
은 다음과 스케일을 사용
데이터는 객체의 배열은 다음과 같이 구성되어
vis.y = d3.scaleTime()
.range([vis.height, 0]);
vis.y.domain([
d3.min(vis.displayData, function(d) { return d.beginDate; }),
d3.max(vis.displayData, function(d) { return d.endDate; })
]);
: 나는 왜 설명 할 수없는 여전히 일어나고 있지만 있었는지 알게
var obj = {
name: d.Name,
type: d.type,
beginDate: d.beginDate,
endDate: d.endDate,
eventDate: d.eventDate
};
나는 vis.y'가 정의되지 않은 이유'말할 수 없다
https://jsfiddle.net/jtLp2wzg/
작업은 (마주 정의된다) (마주는 정의되지 않습니다) 당신은 충분한 코드를 보여주지 않았기 때문에 (즉, 어떻게 vis가 생성되고 어떤 범위에서)?문제를 복제하는 완전한 코드 예제를 게시하는 것이 좋습니다. 즉, 여기에 뭔가 빠져 있는데, 'vis.y'는 척도이며 경로의'd '문자열 속성을 반환하지 않습니다. – Mark
@ 마크, 여기에 바이올린이 있습니다 : https://jsfiddle.net/Ltjjj5p2/ 그러나 문제를 재현 할 수 없었습니다. d3.json() 함수 안에 모든 것을 추가하면'vis.y'는 정의되지 않습니다. 일단 내가 그것을 밖으로 당겨 그것을 작동합니다. 그래서 무언가가 내가 그것이 범위 지정 문제라고 생각하게 만들까? – Keven
사실, 범인을 찾은 것 같아요.하지만이 문제가 왜 영향을 미치는지 확신 할 수 없습니다. 내 코드는'function loadData()'안에 싸여있다. 페이지가로드 될 때 나는'loadData(); '를 직접 호출한다. 함수 호출을 제거하고'd3.json()'데이터로드를 빼면'vis.y'가 사용 가능합니다. 왜 그런가요? – Keven