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 для оси действительно исправляет это (по какой-либо причине... ошибка?), поэтому, если у кого-то нет лучших идей, я сделаю это!
Ответы
Ответ 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() в функции, поскольку он вводил нежелательный "дрифт" (я хочу местное время) и заставляю график отрубаться слева.