Мне нравится динамически устанавливать значение minPointLengh для высокого графика. Но приведенный ниже код не работает. не могли бы вы помочь мне сделать это.

$(function () {
    $('#container').highcharts({
        chart: {
            type: 'column'
        },
        xAxis: {
            categories: ['Sep', 'Oct', 'Nov', 'Dec']
        },

        plotOptions: {
        var minPointLength; 
                if(this.y > 0)  
                  minPointLength = 3,  
             else  
                  minPointLength = 0,
            series: {
                        minPointLength: minPointLength,
            }
        },
        series: [{
            data: [4, 0, 1, 5]
        }]
    });
});
3
Nirmal Srinath 16 Июн 2016 в 15:09
1
MinPointLength - это параметр уровня серии, но вы пытаетесь указать ему, чтобы он смотрел на значение y точки. Есть много причин, по которым это не сработает так, как вы пытаетесь это сделать. Наилучший вариант, который я нашел для достижения того, что вы хотите здесь, - это изменить все ваши нулевые значения на нулевые значения. minPointLength не повлияет на нулевые значения, но повлияет на нулевые значения.
 – 
jlbriggs
16 Июн 2016 в 20:07

5 ответов

Проблема с существующими решениями:

  1. minPointLength не может быть разным для нескольких столбцов в серии. Так это не сработает, так как я хочу, чтобы значение бара 0 оставалось неизменным.
  2. Я не могу изменить данные с 0 на null, потому что у меня есть всплывающая подсказка, которая показывает данные при наведении, поэтому я не могу отображать null как данные.

Решение:
Мы добавляем дополнительную высоту столбца в данные серии и удаляем (вычитаем) ее из данных всплывающей подсказки.

  1. Создайте свойство say extraBarHeight и вставьте его в каждую точку данных в highchart. данные (т. е. тот, который вы получаете в tooltip: formatter(data){} ).
  2. Теперь добавьте этот extraBarHeight в данные, которые вы собираетесь установить в
    buildGraph () { серии:"" }
  3. Во всплывающей подсказке проверьте свои данные formatter(data){, вы найдете extraBarHeight для каждой панели. Вычтите эту сумму из данных всплывающей подсказки (которые вы, вероятно, будете извлекать из свойства точек, которое автоматически обновляется в соответствии с данными серии)

Теперь вычислить extraBarHeight непросто.

  1. Переберите все точки данных в последовательных данных и найдите наивысшую один, maxUnit

  2. extraBarHeight = 10% от maxUnit (вы можете изменить процент)

  3. Сравните каждую точку данных последовательно. Мы делаем это, чтобы маленькие единицы не становились больше больших, и оставляем нулевые полосы такими, какие они есть.

    <код> if (dataPoint

Это долгое и сложное решение, но это единственно возможный путь, по крайней мере, на данный момент.

0
rahulxyz 25 Янв 2019 в 15:30
Правильно, мне также нужно было показывать всплывающие подсказки, поэтому я последовал этому подходу: stackoverflow.com/a/66363877/3339907
 – 
shhdharmen
25 Фев 2021 в 10:10

Это невозможно. Атрибут minPointLength применяется ко всей серии и не может быть изменен для отдельных точек.

Если вы хотите правильно показать, когда значения положительные, а когда они равны 0, может быть полезно отобразить метки данных, чтобы эти столбцы были четко отмечены (см. Этот пример по адресу: https://jsfiddle.net/brightmatrix/1spxcsmd/).

Кроме того, все, что вы хотите делать динамически в коде Highcharts, должно быть в функциях, вызываемых либо событиями, либо функцией formatter. Вы не можете вставлять переменные или код непосредственно в параметры диаграммы. Одна из причин, по которой ваш исходный код не работал, была связана с вашим кодом в plotOptions.

-1
M. Zavarello 16 Июн 2016 в 17:38

Вы не можете использовать код внутри объекта.
Попробуйте сделать это:

var minPointLength;  

    if(this.y > 0)  
                  minPointLength = 3,  
             else  
                  minPointLength = 0,  
        };

    series: {
                minPointLength : minPointLength
        }
-2
Sharon Haim Pour 16 Июн 2016 в 15:18
PlotOptions: {var minPointLength; if (this.y> 0) minPointLength = 3, else minPointLength = 0, series: {//if(this.y> 0) minPointLength: minPointLength, // else // minPointLength: 0,}},
 – 
Nirmal Srinath
16 Июн 2016 в 15:23
Что не работает? Что это за исключение? Пожалуйста, дополните.
 – 
Sharon Haim Pour
16 Июн 2016 в 15:25
Не могли бы вы посмотреть обновленный код в вопросе.
 – 
Nirmal Srinath
16 Июн 2016 в 15:34

Мое предложение: измените любые значения 0 на значения null.

minPointLength не повлияет на точки с нулевыми значениями y.

Обновите код до:

$(function () {
    $('#container').highcharts({
        chart: {
            type: 'column'
        },
        xAxis: {
            categories: ['Sep', 'Oct', 'Nov', 'Dec']
        },

        plotOptions: {
            series: {
              minPointLength: 3
          }
        },
        series: [{
            data: [4, null, 1, 5]
        }]
    });
});

Примере:

Дополнительная причина того, что ваш код не будет работать: вы пытаетесь установить свойство minPointLength непосредственно внутри объекта plotOptions - оно должно находиться внутри одного из объектов селектора серии (например, 'series: {} ',' column: {} 'и т. Д.).

5
jlbriggs 16 Июн 2016 в 20:10

Решение, используемое @jlbriggs, отлично работает, но оно также удаляет данные из всплывающих подсказок.

Я применил аналогичный подход, но вместо того, чтобы сделать их нулевыми, я просто преобразовал значения 0 в -1 и установил min в yAxis как 1. А также показал 0 для значений <0 во всплывающей подсказке.

0
shhdharmen 25 Фев 2021 в 10:10