Уменьшить количество видимых меток на диаграмме Ext JS 4

#javascript #charts #label #extjs4

#javascript #Диаграммы #метка #extjs4

Вопрос:

Я пишу компонент линейной диаграммы Ext JS 4. Все работает нормально, но когда я отображаю метки под осью, они просто слишком плотные. Я не буду уменьшать количество видимых меток. Как это сделать? Вот мой код для оси:

 {
    type: 'Category',
    position: 'bottom',
    fields: ['date'],
    grid: true,
    label: {
        field: 'label',
        rotate: { degrees:315 },
        renderer: function(item) {
            var date = new Date(item);
            /* parseIntToStringWithZeros is a custom method somewhere else */
            var day = parseIntToStringWithZeros(date.getDate());
            var month = parseIntToStringWithZeros(date.getMonth());
            result = day   '-'   month;
            return resu<
        }
    }
}
 

Комментарии:

1. Я бы настоятельно рекомендовал избегать использования системы диаграмм ExtJS — они еще не очень зрелые. Попробуйте highcharts , это проект с открытым исходным кодом, бесплатный для некоммерческого использования. Вы можете принять его, создать настраиваемый компонент на основе highcharts, и вся система диаграмм будет в вашем ExtJS без каких-либо проблем 🙂

Ответ №1:

Я думаю, вам может потребоваться использовать «числовую» ось вместо оси «Категория» для начала (не уверен, как выглядят ваши данные, но вам может потребоваться преобразовать время в значения, чтобы заставить его работать).

С числовой осью вы должны иметь возможность устанавливать количество основных значений тиков (где отображаются линии сетки и метки), задав steps свойство в конфигурации оси; однако это не всегда работает. Более верный способ — переопределить applyData функцию, которая не документирована, поэтому вам нужно выполнить поиск в коде разработчика, чтобы увидеть, что она делает.

Кроме того, чтобы просто не отображать конкретную метку, вы можете просто вернуть пустую строку в функции визуализации метки. например, если вы хотите, чтобы отдельный «месяц» отображался только один раз в приведенном выше коде, вы могли бы сделать что-то вроде этого..

 label: {
    ....
    renderer: (function(){
       var lastRenderedMonth = '';
       return function(item){
           ... //your code above without the return..
           if(month == lastRenderedMonth)
              return "";
           lastRenderedMonth = month;
           return resu<
       };
    })(),
    ...
 

Комментарии:

1. Спасибо за ваши идеи. К сожалению, «месяцы» в моем случае различны, и их сотни. Также мне не нравится концепция переопределения встроенных функций. Кроме того, я переключился на HighCharts, как предложил Лайонел Чан — система построения графиков ExtJS действительно раздражает.

2. Удачи с этим. Кстати, если у вас сто уникальных месяцев, это не значит, что все они должны быть на экране одновременно; так же легко сделать так, чтобы он отображал только одну метку в год. Недавно я написал сообщение в блоге о стилизации диаграмм Ext, которое может быть полезным scottlogic.co.uk/2011/12/ext-js-4-stock-charts