Пользовательская метка легенды Angular Highcharts на диаграмме с областями

Я должен настроить символ метки в типе диаграммы с областями, как это можно сделать в типе линейной диаграммы:

У меня есть этот код:

Highcharts.chart('container', {
        chart: {
        type: 'area'
    },

    xAxis: {
        categories: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
    },

    plotOptions: {
        series: {
            marker: {
                enabled: false
            }
        }
    },

    series: [{
        data: [29.9, 71.5, 106.4, 129.2, 144.0, 176.0, 135.6, 148.5, 216.4, 194.1, 95.6, 54.4]
    }]
});

Моя легенда такова: Результат

Я ожидаю получить это: введите здесь описание изображения

Я не могу редактировать стиль CSS, это должна быть эксклюзивная настройка только для этой диаграммы.

Я использую angular 7.2, я импортировал Highchart следующим образом:

import {Chart} from 'angular-highcharts';

person Segamoto    schedule 20.02.2019    source источник


Ответы (2)


Этого можно добиться, вручную установив ширину и высоту символов легенды. Вам нужно установить squareSymbol в false, чтобы разрешить разные значения ширины и высоты:

legend: {
    squareSymbol: false,
    symbolHeight: 3,
    symbolWidth: 20
},

Например.

ИЗМЕНИТЬ

Если вы хотите выровнять символ с текстом, используйте useHTML: true и установите lineHeight:

  legend: {
    useHTML: true,
    itemStyle: {
      lineHeight: "23px"
    },
    squareSymbol: false,
    symbolHeight: 3,
    symbolWidth: 20
  },

см. обновленную рабочую версию jsfiddle здесь.

person Kabulan0lak    schedule 20.02.2019
comment
Это работает для метки, но для всплывающей подсказки не работает. - person Merak Marey; 20.02.2019
comment
Это работает, но как я могу центрировать символ с текстом? - person Segamoto; 20.02.2019
comment
@Kabulan0lak сейчас идеально. Большое спасибо! - person Segamoto; 20.02.2019

Замените метод area.prototype.drawLegendSymbol на метод line.prototype.drawLegendSymbol. Этого достаточно в чистом JS:

Highcharts.seriesTypes.area.prototype.drawLegendSymbol =
Highcharts.seriesTypes.line.prototype.drawLegendSymbol;

jsFiddle

В angular вы можете обернуть Highcharts следующим образом:

(function(factory) {
  if (typeof module === "object" && module.exports) {
    module.exports = factory;
  } else {
    factory(Highcharts);
  }
})(function(Highcharts) {
  Highcharts.seriesTypes.area.prototype.drawLegendSymbol =
    Highcharts.seriesTypes.line.prototype.drawLegendSymbol;
});

документы: https://github.com/highcharts/highcharts-angular#to-load-a-wrapper

person raf18seb    schedule 20.02.2019
comment
То же самое здесь: это работает для метки, но для всплывающей подсказки не работает - person Merak Marey; 20.02.2019
comment
Для angular это невозможно сделать. у меня нет seriesTypes - person Segamoto; 20.02.2019
comment
Это «знак» всплывающей подсказки по умолчанию даже для линии или любой другой серии. Если вы хотите изменить это, вы можете сделать это в строке функции tooltip.formatter в этом примере: jsfiddle.net/BlackLabel /kcr1oynf @Segamoto, конечно, можно. Я отредактирую свой ответ. - person raf18seb; 20.02.2019