ng2-диаграммы пончиковая диаграмма с различными данными для каждой серии

#angular #chart.js #ng2-charts

Вопрос:

Я пытаюсь создать диаграмму пончиков с помощью ng2-диаграмм, в которой есть две серии, показывающие что-то похожее на массив, найденный ниже. Я могу получить две серии для визуализации, если количество элементов в массиве данных равно количеству меток. Но я не могу создать серию с внешним кольцом, показывающим 3 числа, и внутренним кольцом, имеющим 6 чисел и разные метки. У кого-нибудь еще есть опыт работы с этим?

 public summaryDataSets = [

    {

      labels: ['parent1', 'parent2', 'parent3'],

      data: [34, 50, 26]

    },

    {

      labels: ['child1_1', 'child1_2', 'child2_1', 'child2_2', 'child3_1', 'child3_2'],

      data: [14, 20, 30, 20, 10, 16]

    }

  ]
 

Ответ №1:

Для этого можно использовать обозначения объектов вместе с пользовательским обратным вызовом метки всплывающей подсказки:

 var options = {
  type: 'doughnut',
  data: {
    datasets: [{
        label: '# of Votes',
        data: [{
          id: 'parent1',
          key: 55
        }, {
          id: 'parent2',
          key: 55
        }, {
          id: 'parent3',
          key: 30
        }],
        borderWidth: 1,
      },
      {
        label: '# of Points',
        data: [{
          id: 'child1',
          key: 55
        }, {
          id: 'child2',
          key: 55
        }, {
          id: 'child3',
          key: 30
        }, {
          id: 'child4',
          key: 55
        }, {
          id: 'child5',
          key: 55
        }, {
          id: 'child6',
          key: 30
        }],
        borderWidth: 1
      }
    ]
  },
  options: {
    plugins: {
      tooltip: {
        callbacks: {
          label: (ttItem) => (`${ttItem.raw.id}: ${ttItem.raw.key}`)
        }
      }
    },
    parsing: {
      key: 'key'
    }
  }
}

var ctx = document.getElementById('chartJSContainer').getContext('2d');
new Chart(ctx, options); 
 <body>
  <canvas id="chartJSContainer" width="600" height="400"></canvas>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/3.6.0/chart.js"></script>
</body> 

Комментарии:

1. Это выглядит возможным, мне нужно будет выяснить, как использовать его с ng2-диаграммами. Спасибо за помощь, я дам вам знать, как все обернется.

2. MB забыл эту часть, вам нужно будет установить next ветвь ng2charts и использовать по крайней мере v3.6 из chart.js чтобы использовать это

3. Поэтому я обновил свой chart.js и пакеты ng2-графиков и полностью все сломали. Определенно, есть некоторые отличия.

4. Когда вы говорите «следующая» ветвь, какую вы имеете в виду? Я только что установил версию 2.4.2.

5. ng2-charts@next что даст вам версию: 3.0.0-rc.7

Ответ №2:

Наконец-то я заставил его работать с версией 2.X. Я в основном выровнял иерархическую структуру данных и добавил нули в несколько массивов данных. Ниже приведен код, который даст вам двухслойную диаграмму пончиков со вторым слоем, показывающим разделение раздела первого слоя.

 public summaryTreeChartLabels: Label[] = ['asdf', 'sdgf', 'dfhg', 'asdf_1', 'asdf_2', 'sdgf_1', 'sdgf_2', 'dfgh_1', 'dfgh_2'];

public summaryTreeChartData = [[34, 50, 26, 0,0,0,0,0,0], [0,0,0, 14, 20, 30, 20, 10, 16]];

public summaryTreeChartType: ChartType = 'doughnut';
 

введите описание изображения здесь