Новая строка для легенды в Google Chart (PieChart) - PullRequest
0 голосов
/ 05 сентября 2018

Я использую Google-диаграмму (круговую диаграмму) и хочу, чтобы каждая легенда начиналась с новой строки, а НЕ как на картинке ниже:

Piechart

вот мой код:

 var data = new google.visualization.arrayToDataTable(chartData, false);

                        var optionsErrorDetails = {
                            title: 'My Piechart',
                            fontSize: 10
                            ,

                            pieHole: 0.3,

                            legend:
                                {
                                    position: 'top',
                                    alignment: 'start',

                                textStyle: {
                                    fontSize: 8
                                },

                            },


                        };

                        var chartErrorDetails = new google.visualization.PieChart(document.getElementById('errorDetails'));

                        chartErrorDetails.draw(data, optionsErrorDetails);

Ответы [ 2 ]

0 голосов
/ 05 сентября 2018

единственный способ гарантировать, что каждая метка легенды отображается в новой строке, - расположить легенду справа,
см. следующий рабочий фрагмент ...

google.charts.load('current', {
  packages: ['corechart']
}).then(function () {
  var chartData = [
    ['Category', 'Value'],
    ['Category Alpha', 46.7],
    ['Category Beta', 53.3],
  ];

  var data = google.visualization.arrayToDataTable(chartData, false);

  var optionsErrorDetails = {
    title: 'My Piechart',
    fontSize: 10,
    pieHole: 0.3,
    legend: {
      position: 'right',
      textStyle: {
        fontSize: 8
      },
    },
  };

  var chartErrorDetails = new google.visualization.PieChart(document.getElementById('errorDetails'));

  chartErrorDetails.draw(data, optionsErrorDetails);
});
#errorDetails {
  display: inline-block;
}
<script src="https://www.gstatic.com/charts/loader.js"></script>
<div id="errorDetails"></div>

есть опция maxLines, которая работает, когда legend.position равен 'top'.
но это только позволяет дополнительные строки, это не заставляет их,
из документов ...

legend.maxLines - Максимальное количество строк в легенде. Установите это число больше единицы, чтобы добавить строки в легенду. Примечание. Точная логика, используемая для определения фактического числа отображаемых строк, все еще изменяется.


примечание: arrayToDataTable - статический метод, для которого не требуется ключевое слово new ...

var data = google.visualization.arrayToDataTable(chartData, false);

РЕДАКТИРОВАТЬ

Вы можете попробовать переместить метки вручную,
см. следующий рабочий фрагмент для грубого примера ...

google.charts.load('current', {
  packages: ['corechart']
}).then(function () {
  var chartData = [
    ['Category', 'Value'],
    ['Category C', 50],
    ['Category B', 50],
    ['Category A', 50],
  ];

  var data = google.visualization.arrayToDataTable(chartData, false);

  var optionsErrorDetails = {
    chartArea: {
      bottom: 72
    },
    title: 'My Piechart',
    fontSize: 10,
    pieHole: 0.3,
    legend: {
      position: 'bottom',
      alignment: 'middle',
      textStyle: {
        fontSize: 8
      },
    },
  };

  var container = document.getElementById('errorDetails');
  var chartErrorDetails = new google.visualization.PieChart(container);

  google.visualization.events.addListener(chartErrorDetails, 'ready', function () {
    var circles = container.getElementsByTagName('circle');
    var labels = container.getElementsByTagName('text');
    var labelIndex = -1;
    var fontSize;
    var radius;
    var xCoordCircle;
    var xCoordLabel;
    var yCoordLabel;
    var yCoordCircle;
    Array.prototype.forEach.call(labels, function(label) {
      if ((label.getAttribute('text-anchor') === 'start') && (label.getAttribute('fill') !== '#ffffff')) {
        labelIndex++;
        if (labelIndex === 0) {
          radius = parseFloat(circles[labelIndex].getAttribute('r'));
          xCoordCircle = circles[labelIndex].getAttribute('cx');
          xCoordLabel = label.getAttribute('x');
        } else {
          fontSize = parseFloat(label.getAttribute('font-size')) * labelIndex;
          yCoordLabel = parseFloat(label.getAttribute('y'));
          label.setAttribute('x', xCoordLabel);
          label.setAttribute('y', (yCoordLabel - fontSize - (radius * labelIndex)));
          yCoordCircle = parseFloat(circles[labelIndex].getAttribute('cy'));
          circles[labelIndex].setAttribute('cx', xCoordCircle);
          circles[labelIndex].setAttribute('cy', yCoordCircle - fontSize - (radius * labelIndex));
        }
      }
    });
  });

  chartErrorDetails.draw(data, optionsErrorDetails);
});
<script src="https://www.gstatic.com/charts/loader.js"></script>
<div id="errorDetails"></div>
0 голосов
/ 05 сентября 2018

Я не знаю, поможет ли это, но для Highcharts, способ отображения элементов легенды по вертикали, вы должны сказать: layout: 'vertical'. Возможно, это работает так же, как в Google-чартах. (см. ниже)

                   legend: {
                    layout: 'vertical',
                    align: 'top',
                    verticalAlign: 'top',
                    fontweight: 'normal',
                    margin: -4,
                    padding: 0
                },
...