2017-09-22 12 views
0

SVG에 대한 geometricPrecision 스타일 옵션을 알고 있지만 경로는 여전히 추악한 앨리어싱 양을 나타냅니다. 사용하고있는 데이터 세트는 약 400 포인트 정도로 상당히 밀도가 높습니다. 아래의 빨간색 경로를 살펴보십시오. SVG에서 안티 앨리어싱 경로에 대한 다른 옵션은 SVG 경로 렌더링이 geometricPrecision 옵션을 넘어 앤티 앨리어스가 적용될 수 있습니까?

path aliasing present even when geometricPrecision style active

이 있습니까?

EDIT : 라인은 다음과 같이 탭으로 구분 된 데이터로부터 생성 (마이너스 중요하지 않은 세부 사항)된다

:

var x = d3.scaleLinear() 
    .range([0, width]); 

var y = d3.scaleLinear() 
    .rangeRound([height, 0]); 

x.domain([0,240000]); 
y.domain([0,30]); 


var line = d3.line() 
    .x(function(d) { return x(d.income); }) 
    .y(function(d) { return y(d.tax); }); 
... 
... 
... 

g.append("path").classed("linedata", true) 
     .datum(data) 
     .attr("fill", "none") 
     .attr("stroke", "#e04444") 
     .attr("stroke-linejoin", "round") 
     .attr("stroke-linecap", "round") 
     .attr("stroke-width", 2.3) 
     .attr("d", line); 
+0

당신이 우리를 보였다 경우 * 빨간색 경로가 만들어 *, 실제 코드와 함께, 우리는 그 경로를 보간, 대신 SVG 정밀도 취급에 대해 생각할 수있는 방법에 대해 설명합니다. –

+0

@GerardoFurtado 몇 가지 세부 사항을 추가했습니다. – wrkyle

+0

경로 데이터를 필터링하여 이전에 포함 된 점의 1.5px 이내에있는 점을 제외하고 다시 그립니다. 빈약 한 데이터가 아닌 너무 많은 데이터로 인해 앨리어싱이 발생할 수 있습니다. – Phrogz

답변

0

그것이 여기에서 문제가 밝혀 앨리어싱 아니다 또는 고밀도 데이터 보간법. 결국 경로 곡률에 맞게 데이터 밀도를 최적화하는 동안 데이터 값을 SVG 픽셀 값에 매핑하는 데 사용 된 d3.scale이라는 문제가 발생했습니다.

대신 rangeRound으로 D3 크기를 만들면 렌더링 된 경로가 별칭으로 표시되도록 가장 가까운 픽셀로 매핑됩니다. 단순히 rangeRoundrange으로 전환하면 데이터를 보간하는 데 사용 된 방법에 관계없이 훨씬 더 부드러운 경로가됩니다.

enter image description here