2014-10-16 2 views

답변

0

10 내지 40은 5pxs 있지만 가능 y 축에 대한 분포 :

Highcharts.wrap(Highcharts.Axis.prototype, 'translate', function (proceed) { 
    // Normal Translation 
    var result = proceed.apply(this, [].slice.call(arguments, 1)); 

    // Apply curving 
    if (this.options.curvature) { 
    var val = (arguments[1]/(this.max - this.min)) * (Math.PI) - (Math.PI/2), 
     val2 = (Math.sin(val) + 1)/2; 

    result = (this.len * val2); 
    if (arguments[2] == 0) { 
     result = this.len - result; 
    } 
    } 
    return result; 
}); 

$('#container').highcharts({ 
    yAxis: { 
    min: 0, 
    max: 1, 
    tickInterval: 0.1, 
    curvature: true 
    }, 
    series: [{ 
    data: [0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1] 
    }] 
}); 
+0

어떻게 될까요? API 문서에 따르면 "tickPositioner"는 간단한 데이터 배열을 반환합니다. 틱 사이의 픽셀 간격은 없습니다. 데모 스크립트는 명확하지 않습니다. – user3359229

+0

'tickPositioner'에서'this.width'에 접근 할 수 있습니다 - 그래서 축의 최소, 최대 및 너비를 알 수 있습니다. 이제 원하는 위치에 따라 간단한 배열을 반환하는 로직을 작성하십시오. –

+0

"this.width"를 사용하는 몇 가지 예를 보여줄 수 있습니까? – user3359229

0

이하의 코드는 [133, 141, 150, 160, 171, 185, 200, 21 tickPositions 추가 8, 240, 267, 300, 343, 400, 480, 600, 800, 1200, 2400]을 첨부 한 이미지 에서처럼 균일 한 간격으로 배치하십시오. enter image description here

H.wrap(H.Axis.prototype, 'translate', function (proceed) { 
      var result = proceed.apply(this, [].slice.call(arguments, 1)); 
      if (this.options.curvature) { 
       var tickPos = [133, 141, 150, 160, 171, 185, 200, 218, 240, 267, 300, 343, 400, 480, 600, 800, 1200, 2400]; 
       var tickPosLen = [275, 259, 243, 227, 211, 195, 178, 162, 146, 130, 114, 98, 81, 65, 49, 33, 17, 1]; 
       var index = tickPos.indexOf(arguments[1]); 
       if (index >= 0) { 
        result = tickPosLen[index]; 
       } 
       if (arguments[2] == 0) { 
        var arrBiggerElements = tickPos.filter((inArray) => { 
         return inArray > arguments[1]; 
        }); 
        var nextElement = Math.min.apply(null, arrBiggerElements); 
        var nextElementIndex = -1; 
        var prevElementIndex = -1; 
        if (nextElement == null) { 
         prevElementIndex = tickPos.length - 1; 
        } else { 
         nextElementIndex = tickPos.indexOf(nextElement); 
         prevElementIndex = nextElementIndex - 1; 
        } 
        var nextTickValue = -1; 
        var prevTickValue = -1; 
        if (nextElementIndex > 0) { 
         nextTickValue = tickPos[nextElementIndex]; 
        } 
        if (prevElementIndex > 0) { 
         prevTickValue = tickPos[prevElementIndex]; 
        } 
        if (nextTickValue > 0 && prevTickValue > 0) { 
         var fac = (nextTickValue - prevTickValue)/16; 
         var decrement = (arguments[1] - prevTickValue)/fac; 
         var lowerPointLen = tickPosLen[prevElementIndex]; 
         result = lowerPointLen - decrement; 
        } 
        result = this.len - result; 
       } 
      } 
      return result;[enter image description here][1] 
관련 문제