Изменение нечетной шкалы при обновлении типа диаграммы - PullRequest
0 голосов
/ 04 декабря 2018

У меня есть диаграмма пирамиды населения с каждым полом в виде ряда.Пользователю нужна возможность изменять типы диаграмм серии.По умолчанию бар, и они хотят иметь возможность перейти на линию.Я создал функцию, которая изменит тип диаграммы.Это работает, но серия, которая «идет влево» (или отрицательное значение) имеет действительно странное изменение значения / масштаба.Если я скрываю правую серию, то значение / шкала левой серии исправляется.Покажите правильную серию, и график снова будет выглядеть.Если я вернусь к серии баров, то серия будет выглядеть корректно.

Мой код для изменения типа серии диаграмм:

  var mainGraphFormatType = $('#ddlGraphFormatDropDown');

  mainGraphFormatType.change(function() {
    var chartM = $('#container').highcharts();
    if ($(this).val() != 'null') {
      var selType = $(this).val().toLowerCase();
      if (selType == 'scatter') {
        selType = 'line';
      }
      changeType(chartM, selType);
    }
  });

  function changeType(chart, newType) {
    newType = newType.toLowerCase();
    var serie = chart.series;
    for (i = 0; i < chart.series.length; i++) {
      var item = serie[i];
      item.update({
        type: newType
      });
      var isLegendOn = chart.legend.options.enabled;
      if (isLegendOn) {
        if (!item.showInLegend) {
          item.update({
            showInLegend: true
          });
          item.options.showInLegend = true;
          chart.legend.renderItem(item);
          chart.legend.render();
        }
      }
    }
    changeChartTypeSingSeries(chart);
  }

  function changeChartTypeSingSeries(chart) {
    var serie = chart.series;
    for (i = 0; i < chart.series.length; i++) {
      var item = serie[i];
      if (!item.visible) {
        item.hide();
      }
    }
  }

Я повторил эту проблему с демо-пирамидальной диаграммы старших диаграмм здесь .

1 Ответ

0 голосов
/ 05 декабря 2018

Обходной путь со свопирующим свойством наложения на render событие:

chart: {
  type: 'bar',
  events: {
    render: function() {
      var chart = this,
        series = chart.series[0],
        options = chart.options,
        stacking = options.plotOptions.series.stacking;

      if (stacking === 'normal' && series.type === 'line') {
        chart.update({
          plotOptions: {
            series: {
              stacking: ''
            }
          }
        });
      } else if (stacking === '' && series.type === 'bar') {
        chart.update({
          plotOptions: {
            series: {
              stacking: 'normal'
            }
          }
        });
      }
    }
  }
}

Демонстрация: https://jsfiddle.net/BlackLabel/hdL7eb9x/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...