В старших чартах для каждой категории оставалось много места при использовании индекса с данными - PullRequest
0 голосов
/ 02 июля 2019

Я новичок в HighCharts;В нашем проекте мы используем приведенный ниже код, в котором мы даем значение индекса вместе с данными (я не смогу опубликовать фактический код)

      data.push([indx,getRandomInt(50)]);                       
      splitSeries[i].push({
          "name" : optionData.series[m].name,
          "data" : data
      });

Но мы столкнулись с двумя проблемами

  1. Категории делятся поровну, хотя в первой категории больше баров.
  2. В нижней части каждой категории так много места.

    chart after rendering



Как решить эти проблемы, пожалуйста, помогите.

Добавление jsfiddle

Ответы [ 2 ]

0 голосов
/ 03 июля 2019

Я не уверен, правильно ли я понимаю ваш вопрос или нет, но приведенный выше ответ от @ppotaczek мне кажется нормальным.

Пожалуйста, ознакомьтесь с этим рабочим примером. fiddle .



Здесь я добавил gridLineWidth: 1 и tickmarkPlacement: "between", чтобы продемонстрировать, что тик фактически проходит от середины.

И как сказал @ppotaczek: Вы можете изменить расстояние между точками, изменив свойства pointPadding и groupPadding.

Пожалуйста, дайте мне знать, если это работает для вас!:)




Поскольку ссылка на fiddle.net должна сопровождаться кодом, который я включил здесь:

$(function() {
  $('#container').highcharts({
    chart: {
      type: 'column',
      inverted: true,
    },
    title: {
      text: 'Stacked column chart'
    },
    xAxis: {
      categories: ['2018-06', '2018-07', '2018-08', '2018-09', '2018-10'],
      tickWidth: 1,
      tickmarkPlacement: "between",
      gridLineWidth: 1
    },
    yAxis: {
      min: -10,
      title: {
        text: 'Total fruit consumption'
      },
      stackLabels: {
        enabled: true,
        style: {
          fontWeight: 'bold'
        }
      }
    },
    legend: {
    enabled :false,
      align: 'right',
      x: -70,
      verticalAlign: 'top',
      y: 20,
      floating: true,
      backgroundColor: (Highcharts.theme && Highcharts.theme.legendBackgroundColorSolid) || 'white',
      borderColor: '#CCC',
      borderWidth: 1,
      shadow: false
    },
    tooltip: {
      formatter: function() {
        return '<b>' + this.x + '</b><br/>' +
          this.series.name + ': ' + this.y + '<br/>' +
          'Total: ' + this.point.stackTotal;
      }
    },
   
    plotOptions: {
      series: {
        groupPadding: 0.99,
        pointPadding: 0.99
      }
    },
    series: [{
      name: 'Q1',
      data: [
        [0, -5],
        [1, 3],
        [2, 4],
        [3, 7],
        [4, -2]
      ]
    }, {
      name: 'Q2',
      data: [
        [0, 5],
        [1, -3],
        [2, 4],
        [3, -7],
        [4, 2]
      ]
    }, {
      name: 'Q3',
      data: [
        [1, 3],
        [1, -4],
        [2, 7],
        [4, 2]
      ]
    }]
  });
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://code.highcharts.com/highcharts.js"></script>
<script src="https://code.highcharts.com/modules/broken-axis.js"></script>

<div id="container" style="min-width: 310px; height: 400px; margin: 0 auto"></div>
0 голосов
/ 02 июля 2019

Вы можете уменьшить расстояние между точками, уменьшив свойства pointPadding и groupPadding: http://jsfiddle.net/BlackLabel/82f6joyq/

plotOptions: {
    series: {
        pointPadding: 0,
        groupPadding: 0
    }
}

Однако Highcharts резервирует место в категории для каждой серии, так что если вы хотитеДля полного устранения пробелов необходимо использовать breaks.Например, таким образом:

chart: {
    ...,
    events: {
        load: function() {
            var series = this.series,
                breaks = [],
                hasValue,
                breakSize = 1 / series.length,
                i = 0,
                j,
                k = -1,
                tickPos,
                prevTickPos,
                xAxis = this.xAxis[0],
                categories = xAxis.categories;

            function hasData(el) {
                if (el === i) {
                    return true;
                }
            }

            for (i; i < categories.length; i++) {
                for (j = 0; j < series.length; j++) {
                    hasValue = series[j].xData.some(hasData);

                    if (!hasValue) {

                        breaks.push({
                            from: i + j * breakSize,
                            to: i + j * breakSize + breakSize
                        });
                    }
                }
            }

            this.update({
                xAxis: {
                    breaks: breaks
                }
            }, true, true, false);

            for (k; k < categories.length; k++) {
                if (k !== -1) {
                    tickPos = xAxis.ticks[k].mark.getBBox();
                    xAxis.ticks[k].label.attr({
                        y: tickPos.y - (tickPos.y - prevTickPos.y) /
                            2 + xAxis.ticks[k].label.getBBox().height / 2
                    });
                }

                prevTickPos = tickPos || xAxis.ticks[k].mark.getBBox();
            }
        }
    }
}

Демонстрационная версия: http://jsfiddle.net/BlackLabel/xcomk621/

Справочник по API:

https://api.highcharts.com/highcharts/series.column.pointPadding

https://api.highcharts.com/highcharts/series.column.groupPadding

https://api.highcharts.com/highcharts/xAxis.breaks

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