jqPlot DateAxis tickInterval не работает - PullRequest
11 голосов
/ 12 декабря 2011

Я пытаюсь нарисовать диаграмму с одним назначением данных каждый месяц. Я отправляю это на jqPlot в виде единой точки первого числа каждого месяца:

$.jqplot('actualChart', [[['2011-10-01',0.296],['2011-11-01',0.682]]], {
    title: programSelection.options[programSelection.selectedIndex].text,
    axes: {
        xaxis: {
            renderer: $.jqplot.DateAxisRenderer,
            rendererOptions: { tickRenderer: $.jqplot.CanvasAxisTickRenderer },
            tickOptions: { formatString: '%b' }
        }
    }
}

Я загружаю данные графика с помощью Ajax. Некоторые наборы данных имеют больше точек данных, чем другие - в приведенном выше примере только с 2 точками отметки оси x (что означает «% b» означает только октябрь и ноябрь) отображаются автоматически вдоль оси, но слишком часто, например, например, Сентябрь ... октябрь ... октябрь ... октябрь ... октябрь ... ноябрь - в обычных точках вдоль показанной линии. Я просто хочу один тик в начале октября и еще один в начале ноября.

Я потратил много времени на поиск, и, кажется, tickInterval создан для этого, но добавил

tickInterval: '1 month'

просто делает оси X, точки данных и линии исчезающими - это нарушенная функциональность, о которой я говорю! Указание любого другого интервала, например

tickInterval: '2 days'

также ломает его.

Обходной путь - ввести галочки вручную, например,

ticks: ['2011-10-01','2011-11-01']

Этот действительно ставит галочки в нужном месте, но

а) - хлопот, который не требуется, и

b) теряет приятное заполнение на обоих концах точек данных графа, поэтому точки на обоих концах появляются на краях графа. Если, конечно, не добавлены ручные отметки с обеих сторон, но в приведенном выше примере с октября по ноябрь я не хочу указывать целый месяц с обеих сторон, потому что тогда интересные данные занимают только среднюю треть графика.

Может кто-нибудь помочь мне с этим? Заранее спасибо.

РЕДАКТИРОВАТЬ - нашел решение: Предоставление атрибута min для оси, по-видимому, исправляет это (по какой-то причине ... ошибка?), Так что, если у кого-то нет лучшего идеи я сделаю это!

Ответы [ 5 ]

14 голосов
/ 20 июля 2012

Я нашел решение! Вам нужно указать тикинтервал как метку времени javascript. Допустим, вы хотите 1 час. Это будет 1000 * 60 * 60 = 3600000 (временные метки javascript указаны в миллисекундах).

Итак, вы бы написали: tickInterval: '3600000',

Работает здесь.

8 голосов
/ 05 января 2013

tickInterval:'1 day' работает. Вы можете попробовать:

xaxis: {
        renderer: $.jqplot.DateAxisRenderer,
        rendererOptions: { tickRenderer: $.jqplot.CanvasAxisTickRenderer },
        tickOptions: { formatString: '%b' },
        tickInterval: '1 day'
       }
6 голосов
/ 02 января 2012

Поскольку я думаю, что вы не можете ответить на свой вопрос (и я столкнулся с той же проблемой), я опубликую ваше решение в качестве ответа, так как оно решило его и на моей стороне:

Предоставление атрибута min для оси, по-видимому, исправляет это (по какой-то причине ... ошибка?), Поэтому, если у кого-то нет идей получше, я сделаю это!

1 голос
/ 04 апреля 2012

Я посмотрел в jqplot.dateAxisRenderer.js, и похоже, что для сброса переменной this.tickInterval должна быть вызвана функция сброса. Я смутно припоминаю, что вы можете вручную сбросить рендерер, но учтите, что интервал между тиками указан в миллисекундном формате (по крайней мере, я не уловил перевод своим быстрым взглядом).

Я думаю, что это просто ошибка.

И на заметку, я закомментировал единственный вызов min.getUtcOffset () в функции, так как он вводил нежелательный «дрейф» (я хочу местное время) и заставлял граф отрубаться слева .

1 голос
/ 02 февраля 2012

Вы должны указать временную метку в данных графика. Как отмечено на примере jqplot осей дат:

Обратите внимание, что, хотя jqPlot будет анализировать практически любую удобочитаемую человеком дату, наиболее безопасно использовать метки времени javascript, когда это возможно. Кроме того, лучше всего указать дату и время, а не только одну дату. Это связано с несовместимой обработкой браузером местного времени по сравнению с UTC с голыми датами.

Вы можете проверить это здесь: http://www.jqplot.com/deploy/dist/examples/date-axes.html

Я упоминаю об этом, потому что наткнулся на эту проблему 2 дня назад. Я решил это, передав отметку времени и определив большее значение tickInterval, чем «1 день».

...