2017-12-15 4 views
1

Ionic 3/Angular 4 앱에 ChartJS 버전 2.6이 있습니다. 내 라인 차트 구성에는 2 개의 데이터 세트가 있습니다. 두 줄 모두 채우기 그라디언트를 얻으려고 노력했습니다.ChartJS 각 채우기 그라데이션이 다른 두 줄

Example

그러나 지금까지 나는 단지 같은 것을 처리했다 :

는이 같은 뭔가가 필요

My Attempt 상관없이 나는 나의 첫번째 데이터 세트 차트 항상 무엇을하려고

두 번째 것보다 우월하다. 마치 2 번째 것을 숨 깁니다. 내가 나중에 내가 데이터베이스에서 그들을 가지고 후에 설정으로

let chart = this.lineCanvas.nativeElement.getContext('2d'), 
    gradientSys = chart.createLinearGradient(0, 200, 0, 0); 

    gradientSys.addColorStop(0.4, 'rgba(49, 218, 11, 1)'); 
    gradientSys.addColorStop(0.7, 'rgba(218, 129, 11, 1)'); 
    gradientSys.addColorStop(1.0, 'rgba(218, 11, 11, 1)'); 

    let gradientDia = chart.createLinearGradient(0, 120, 0, 0); 

    gradientDia.addColorStop(0.4, 'rgba(49, 218, 11, 1)'); 
    gradientDia.addColorStop(0.6, 'rgba(218, 129, 11, 1)'); 
    gradientDia.addColorStop(1.0, 'rgba(218, 11, 11, 1)'); 

    this.chartConfig = { 
     type: 'line', 

     options: { 
      scales: { 
       yAxes: [{ 
        ticks: { 
         min: 0, 
         callback: function (value, index, values) { 
          if (Math.floor(value) === value) { 
           return value; 
          } 
         } 
        } 
       }] 
      } 
     }, 

     data: { 
      labels: [], 
      datasets: [ 
       { 
        label: 'Systolic', 
        fill: true, 
        lineTension: 0.1, 
        backgroundColor: gradientSys, 
        borderColor: "rgba(115, 115, 115, 1)", 
        borderCapStyle: 'butt', 
        borderDash: [], 
        borderDashOffset: 1.0, 
        borderJoinStyle: 'miter', 
        pointBorderColor: "rgba(115, 115, 115, 1)", 
        pointBackgroundColor: "#fff", 
        pointBorderWidth: 1, 
        pointHoverRadius: 5, 
        pointHoverBackgroundColor: "rgba(115, 115, 115, 1)", 
        pointHoverBorderColor: "rgba(115, 115, 115, 1)", 
        pointHoverBorderWidth: 2, 
        pointRadius: 3, 
        pointHitRadius: 10, 
        spanGaps: false, 
        data: [] 
       }, 
       { 
        label: 'Diastolic', 
        fill: true, 
        lineTension: 0.1, 
        backgroundColor: gradientDia, 
        borderColor: 'rgba(115, 115, 115, 1)', 
        borderCapStyle: 'butt', 
        borderDash: [], 
        borderDashOffset: 1.0, 
        borderJoinStyle: 'miter', 
        pointBorderColor: 'rgba(115, 115, 115, 1)', 
        pointBackgroundColor: "#fff", 
        pointBorderWidth: 1, 
        pointHoverRadius: 5, 
        pointHoverBackgroundColor: 'rgba(115, 115, 115, 1)', 
        pointHoverBorderColor: 'rgba(115, 115, 115, 1)', 
        pointHoverBorderWidth: 2, 
        pointRadius: 3, 
        pointHitRadius: 10, 
        spanGaps: false, 
        data: [] 
       } 
      ] 
     } 
    }; 

데이터는 [] 값이 비어있다 : 여기

내가 노력하고 차트 설정입니다. 첫 번째 데이터 집합의 채우기 값을 '-1'로 설정하려고 시도했지만 그 결과는 손상됩니다. 여기에 올바른 방향으로 나를 가리 키시겠습니까?

+0

'dataset'에있는 두 개의 배열 엔트리를 바꾸려고 했습니까? 당신이 보여주는 두 번째 사진이 수축기이거나 이완기인지 여부는 분명하지 않지만, 후자라면 항목 1이 항목 0을 표시 할 것이기 때문에 나는 추측 할 수 있습니다. 수축기가 항상 낮을 경우 마지막 항목 그래서 마지막으로 꾸몄습니까? – halfer

+0

당신이 생각할 수있는 또 다른 사항은 서로 위에 놓여있는 두 개의 차트 개체를 만드는 것입니다. 따라서 데이터 순서를 뒤집어도 도움이되지 않으면 두 개의 차트를 만들어 차트 z- 인덱스를 뒤집을 수 있습니다. – halfer

+0

안녕하세요. 감사합니다. 수축기는 작동하는 데이터 세트 주위를 스와핑 할 때 그렇습니다. – lulu88

답변

1

우리는 코멘트에서 가능한 두 가지 해결책을 논의했습니다.

렌더링 순서를 바꾸는 것만으로도 효과가있었습니다. 간단히 말해 datasets[0]datasets[1] (또는 그 반대로)으로 바꾸는 것이 트릭을 만들었습니다. JavaScript 라이브러리가 여기에 하나의 그래프를 표시 할 것으로 기대합니다. 따라서 그래프 하나가 항상 커지면 먼저 그래프를 그려야합니다.

이 방법이 효과가 없다면 두 가지 별도의 그래프 개체를 만들고이를 서로 겹치는 두 개의 DOM 요소에 매핑 할 수 있습니다. 각 경우에 그래프 개체가 투명하면 (예 : 배경에 채우기 색이 없음)이 경우 효과가있을 수 있습니다.