2017-01-02 2 views
0

이 부분은 fiddle 스트로크 색상을 변경하려면 어떻게해야합니까?스트로크 색상을 정의하는 방법

나는이 코드를 시도하지만, 색상 변경되지 않습니다

var colors = ["#F0E5FF","#E1CCFF","#C499FF","#AC79F2","#8D4CE5","#6100E5","#C94D8C"]; 

var colorScaleDomain = [100, 300, 1000, 10000, 50000, 600000]; 

var colorScale = d3.scale.threshold() 
    .domain(colorScaleDomain) 
    .range(colors); 

link.style("stroke", function(d){ 
    return colorScale(d[0].size) 
}); 

내 코드에서 어떤 문제가 있습니까?

+0

코드에 약간의 차이가 있습니다. https://jsfiddle.net/mkaran/om8tqotp/ d3.scale.ordinal() https://jsfiddle.net/mkaran/6qvjep7r을 사용하여 약간 다른 컬러 스케일 도메인과 변형이 있습니다. /. 나는 당신이주는 컬러 스케일 영역이 너무 넓기 때문에 d [0] .size가 하나의 범주에 속하므로 하나의 색상만을 제공한다고 믿습니다. 도메인을 더 잘 조정하십시오 (예 : [300, 500, 1000, 1300, 1800, 2000, 5000, 10000, 13000, 18000, 20000] https://jsfiddle.net/mkaran/gLvnm0pf/ – mkaran

+0

@mkaran : 예, 그렇습니다. 내 실제 데이터 세트가 훨씬 크기 때문에 답변을 게시 할 수 있습니까? – Dinosaurius

+0

@mkaran : 나는 약간 misunestestand 한 가지. 'var colors = [ "# 9EDAE5", "# 6100E5", "# C94D8C"];'var colorScaleDomain = [300, 1000,20000]'이면'300'보다 작은'size'를 가진 모든 항목은 '# 9EDAE5' 색상이 맞습니까? – Dinosaurius

답변

3

그래서 문제는 데이터 "크기"속성과 관련하여 colorScaleDomain이 선택되는 방법에 있습니다. 현재와 ​​마찬가지로 많은 값이 하나의 범주에 속하므로 하나의 색이 선택됩니다. 나는 일반적인 솔루션을 제공하기 위해 노력하겠습니다 아닌 하드 규모 : https://jsfiddle.net/mkaran/3adu1u2n/ 의 colorScaleDomain이 당신의 색상 규모의

var colors = ["#F0E5FF","#E1CCFF","#C499FF","#AC79F2","#8D4CE5","#6100E5","#C94D8C"]; 
var maxSize = d3.max(classes, function(d) { return +d.size;}); 
var colorScaleDomain = []; 
var bin = Math.round(maxSize/colors.length); 
for(let i=0; i < colors.length; i++){ 
    colorScaleDomain.push(bin*i) 
} 
console.log(colorScaleDomain) 
var colorScale = d3.scale.threshold() 
    .domain(colorScaleDomain) 
    .range(colors); 

예를의 길이만큼 동일한 빈을 작성하여 계산됩니다 [0, 3513, 7026, 10539, 14052, 17565, 21078]

색상을 다르게 그룹화하려면 크기가 아닌 다른 변수를 사용해보십시오. 예 : d.imports.length은 이들을 다르게 그룹화합니다 (https://jsfiddle.net/mkaran/snec9kgf/).

+0

아마도 조금 더 명확해질 것입니다. https://github.com/d3/d3-3 .x-api-reference/blob/master/Quantitative-Scales.md # threshold '기본 임계 눈금은 숫자에 대한 round 함수와 동일합니다. 예를 들어 임계 값 (0.49)은 0을 반환하고 임계 값 (0.51)은 1을 반환합니다. '따라서 마찬가지로 1830은 1800-2000 범위에 해당하며이 값은 "# 000000"으로 인코딩됩니다. – mkaran

+0

호출 할 함수는 다음과 같습니다. scale (x) { if (x <= x) 반환 범위 [d3.bisect (domain, x)]; }'color.lenght가 colorScaleDomain보다 큰 경우 12000, 15000 등의 값은'undefined'를 반환합니다. 콘솔을 살펴보십시오. https://jsfiddle.net/mkaran/2oq1hLys/ – mkaran

+0

https://github.com/d3/d3-3.x-api-reference/blob/master/Quantitative-Scales.md# threshold_domain'저울의 범위에있는 값의 수가 N + 1이면 저울의 도메인에있는 값의 수는 N이어야합니다. 도메인에 N 개보다 적은 요소가 있으면 범위의 추가 값이 무시됩니다. 도메인에 N 개 이상의 요소가있는 경우 일부 입력에 대해 scale이 undefined로 반환 될 수 있습니다 .' – mkaran

관련 문제