Angular Chart. js / ng2-charts: горизонтальная полоса со значениями рядом с ней - PullRequest
0 голосов
/ 27 апреля 2020

Я хочу иметь горизонтальную гистограмму в моем приложении Angular (библиотека ng2-chart) с абсолютным значением столбца рядом с ним. Однако у меня возникают проблемы с отображением значения рядом с панелью. Смотрите скриншот ниже, прямо сейчас часть текста внутри бара, которого я не хочу.

enter image description here

HTML

  <div style="padding: 10px;">
    <canvas baseChart *ngIf="loaded"
            [data]="barChartData"
            [labels]="barChartLabels"
            [chartType]="barChartType"
            [options]="barChartOptions"
            [colors]="barChartColors"
            [legend]="barChartLegend">
    </canvas>
  </div>

TS

  public barChartOptions: ChartOptions = {
    responsive: true,
    scales: {
      xAxes: [{
        display: false
      }],
      yAxes: [{
        gridLines: {
          display: false
        }
      }]
    },
    animation: {
      duration: 1000,
      onComplete: function () {
          var chartInstance = this.chart,
          ctx = chartInstance.ctx;
          ctx.fillStyle = "#666";
          ctx.textAlign = 'right';
          ctx.textBaseline = 'middle';

          this.data.datasets.forEach(function (dataset, i) {
              var meta = chartInstance.controller.getDatasetMeta(i);
              console.log(meta)
              var canvasWidth = meta.controller.chart.width;
              meta.data.forEach(function (bar, index) {
                  var data = dataset.data[index];                            
                  ctx.fillText('€ ' + formatNumber(data, 'be', '1.2-2'), canvasWidth, bar._model.y);
              });
          });
      }
  }
  };
  public barChartData: SingleDataSet = [1234, 543, 2134, 124, 644, 1640, 2340];
  public barChartLabels: Label[] = ['A', 'B', 'C', 'D', 'E', 'F', 'G'];
  public barChartType: ChartType = 'horizontalBar';
  public barChartLegend = false;
  public barChartColors: Color[] = [{ backgroundColor: 'rgb(31, 78, 120)' }]

Я также пытался в ctx.fillText сделать canvasWidth + 40, в В этом случае текст полностью находится рядом со строкой, но он отображается вне холста:

enter image description here

...