Подтвердить что ты не робот

JqPlot DateAxis tickInterval не работает

Я пытаюсь каждый месяц нарисовать диаграмму с одним datapoint. Я отправляю это через 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. Некоторые наборы данных имеют больше точек данных, чем другие - в приведенном выше примере только с двумя точками, тики x-axis (которые "% b" означают только что отображаемые как Oct и Nov) отображаются автоматически вдоль оси, но слишком часто, например. Sep... Oct... Oct... Oct... Oct... Nov - в обычных точках вдоль строки, которая показана. Я просто хочу один тик в начале октября, а другой в начале ноября.

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

tickInterval: '1 month'

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

tickInterval: '2 days'

также разбивает его.

Обходной путь заключается в том, чтобы обеспечить тики вручную, например.

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

Это помещает тики в нужное место, но

a) - это проблема, которая не требуется, и

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

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

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

4b9b3361

Ответ 1

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

Итак, вы должны написать: tickInterval: '3600000',

Здесь работает.

Ответ 2

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

xaxis: {
        renderer: $.jqplot.DateAxisRenderer,
        rendererOptions: { tickRenderer: $.jqplot.CanvasAxisTickRenderer },
        tickOptions: { formatString: '%b' },
        tickInterval: '1 day'
       }

Ответ 3

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

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

Ответ 4

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

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

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

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

Ответ 5

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

Я думаю, что это всего лишь ошибка.

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