Модераторы: LSD, AntonSaburov

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> jFreeCharts DateTickUnitType-объясните в двух сл? 
V
    Опции темы
Killer_13
Дата 15.5.2012, 17:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 12.1.2008
Где: Germany

Репутация: нет
Всего: 1



Здравств, нужно в своем TimeSeriesChart подкрутить ось отображения даты. Но я что-то никак не могу врубиться что именно делает второй параметр в конструкторе???? 

Вот как делаю

        
Код

final TickUnits units = new TickUnits();

        DateTickUnit dateUnit1 = new DateTickUnit(DateTickUnitType.HOUR, 2, new SimpleDateFormat("HH-d-MMM"));
        DateTickUnit dateUnit2 = new DateTickUnit(DateTickUnitType.DAY, 1, new SimpleDateFormat("d-MMM"));
        DateTickUnit dateUnit3 = new DateTickUnit(DateTickUnitType.MONTH, 1, new SimpleDateFormat("d-MMM"));
        DateTickUnit dateUnit4 = new DateTickUnit(DateTickUnitType.YEAR, 1, new SimpleDateFormat("d-MMM-yyyy"));

        units.add(dateUnit1);
        units.add(dateUnit2);
        units.add(dateUnit3);
        units.add(dateUnit4);
        
        yAxis.setStandardTickUnits(units);


Нужно отображать как можно больше данных при увеличении, когда остается меньше 10 дней на диаграмме отображать часы, чем больше увеличиваем, тем точнее время и показывается ну к примеру 24 значения... тоисть если я увеличил просматревуемую область до одного дня, я хочу видеть каждый час, увеличил до пол дня - хочу видеть каждые пол часа. Если в отрезке больше 10 дней - показывать только месяц и день.

Это не сложно, но я не могу понять, как конфигурировать 2 параметр?

Спасибо!
PM MAIL   Вверх
Ares4322
Дата 15.5.2012, 22:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 339
Регистрация: 25.9.2007
Где: Россия, Москва

Репутация: 1
Всего: 3



Второй параметр конструктора, по-видимому, это кратность показываемых меток. То есть если стоит тип метки день и кратность 2, то будет показываться метка для каждого второго дня. 
Такой динамический алгоритм расчета точности даты-вещь нужная, но вы столкнетесь с проблемой, как расчитать ширину такой метки с датой и временем и добиться того, чтобы они не перекрывались.
Но этот алгоритм я встречал то ли в JFreeChart, то ли в JasperReports. Сходу его не смог найти. Но если надо, могу поискать.
PM MAIL   Вверх
Killer_13
Дата 15.5.2012, 23:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 12.1.2008
Где: Germany

Репутация: нет
Всего: 1



Цитата

Второй параметр конструктора, по-видимому, это кратность показываемых меток. То есть если стоит тип метки день и кратность 2, то будет показываться метка для каждого второго дня. 
 - как бы и да и нет, не могу понять, странное поведение меток при увеличении, не могу проследить последовательносять.. Месяцы, дни, вроде все красиво, а вот когда остается 1 день, часов не видно, увеличива. еще показываются часы, но опять же 5-6 меток, как когда.. :(
Цитата

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

Есть иъний девелопер Гайд, но там информации о этом что кот наплакал, в инете тоже найти не могу.. :(
Благодарствую за помощь.

PM MAIL   Вверх
Ares4322
Дата 16.5.2012, 08:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 339
Регистрация: 25.9.2007
Где: Россия, Москва

Репутация: 1
Всего: 3



А у вас не будет текст меток перекрываться, если при отображении данных за день метки будут стоять каждый час?
PM MAIL   Вверх
Killer_13
Дата 16.5.2012, 10:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 12.1.2008
Где: Germany

Репутация: нет
Всего: 1



Будет наверное, я пробовал разные варианты, то в некоторых перекрывались. Блин и как сделать? Автоматическая расстановуа хороша, но мне нужно часы показывать когда несколько дней выбрано, а не когда года на главной, я это к тому, что пробовал стандартное форматирование меток.. которое задается одной функцией. Так что посоветуете?.. Пасиб.
PM MAIL   Вверх
Ares4322
Дата 16.5.2012, 10:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 339
Регистрация: 25.9.2007
Где: Россия, Москва

Репутация: 1
Всего: 3



Что касается построения за сутки, то вы пытаетесь впихнуть невпихуемое)
Для того, чтобы 24 метки для часов влезли, надо либо их шрифт уменьшить (что в итоге может сделать их нечитаемыми), либо увеличить длину оси X, например, сделав альбомную страницу (но это не очень удобно).
Мне кажется, что можно не выводить метки для каждого часа. Хватит и для каждого второго или даже 3го. Удобство от этого не сильно пострадает.

Я эту проблему решил в лоб, выводя всего в таком формате дд.мм.гггг чч:мм. Динамическая шкала удобна, но не всегда понятна пользователю.Ему к ней еще нужно будет привыкнуть. А такой формат - он вполне ожидаемый, хотя и не очень гибкий.
PM MAIL   Вверх
COVD
Дата 16.5.2012, 15:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 26.7.2005

Репутация: 17
Всего: 43



Не знаю, как устроен JFreeChart, но при уменьшении размера чарта пользователем значения осей когда-нибудь обязательно наложатся. Чарт не должен их изображать в этом случае. Нужна возможность навести мышь на график и получить точные значения в всплывающем окне, например. 
PM MAIL   Вверх
Killer_13
Дата 18.5.2012, 10:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 12.1.2008
Где: Germany

Репутация: нет
Всего: 1



Цитата(Ares4322 @  16.5.2012,  10:43 Найти цитируемый пост)
Что касается построения за сутки, то вы пытаетесь впихнуть невпихуемое)
Для того, чтобы 24 метки для часов влезли, надо либо их шрифт уменьшить (что в итоге может сделать их нечитаемыми), либо увеличить длину оси X, например, сделав альбомную страницу (но это не очень удобно).
Мне кажется, что можно не выводить метки для каждого часа. Хватит и для каждого второго или даже 3го. Удобство от этого не сильно пострадает.
 - я чуток наверное не правильно выразился, фишка в том, что я получаю странное поведение, например у меня на графике 1 день и в нем 10 значений, по умолчанию влазит 12 значений в график по шырине, но они не отображаются. :(
Меня оч устраивает такой формат как вы написали, я пробовал.
Цитата

Я эту проблему решил в лоб, выводя всего в таком формате дд.мм.гггг чч:мм. Динамическая шкала удобна, но не всегда понятна пользователю.Ему к ней еще нужно будет привыкнуть. А такой формат - он вполне ожидаемый, хотя и не очень гибкий. 
 - но мне часы нужно показывать только тогда, когда видимость меньше 10 дней. Согласитесь, что выглядит не очень, если на графике, разбито например 10 лет, и возле лет стоят нули или единичка, обозначающий первый час в сутках. Не приложу ума как это делать... :(
PM MAIL   Вверх
Ares4322
Дата 18.5.2012, 10:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 339
Регистрация: 25.9.2007
Где: Россия, Москва

Репутация: 1
Всего: 3



Ну покопайтесь в исходниках, попробуйте поменять этот алгоритм в библиотеке.
А за какой промежуток чаще всего будет строится график? Может за такой большой промежуток и строится-то график никогда не будет)
PM MAIL   Вверх
Killer_13
Дата 18.5.2012, 10:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 12.1.2008
Где: Germany

Репутация: нет
Всего: 1



Цитата

Ну покопайтесь в исходниках, попробуйте поменять этот алгоритм в библиотеке.
 - придется сегодня пробовать..
Цитата

А за какой промежуток чаще всего будет строится график? Может за такой большой промежуток и строится-то график никогда не будет) 
 - ничего не известно, должно быть универсальным...
Что ж спасибо за помощь.
PM MAIL   Вверх
Ares4322
Дата 18.5.2012, 11:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 339
Регистрация: 25.9.2007
Где: Россия, Москва

Репутация: 1
Всего: 3



Ну понятно, что универсальным) Это как в алгоритмах: есть средний случай, а есть наихудший. Мне кажется, что если за год будут строить раз в год и увидят метки с минутами, то ничего страшного.
Если найдете решение - напишите, если не сложно. 
PM MAIL   Вверх
Killer_13
Дата 18.5.2012, 14:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 12.1.2008
Где: Germany

Репутация: нет
Всего: 1



Я вот тут копаюсь, пока что не могу понять как работают  roll аргументы в этом конструкторе..
Цитата

 public DateTickUnit(DateTickUnitType unitType, int multiple,
            DateTickUnitType rollUnitType, int rollMultiple,
            DateFormat formatter){}

и да, может знаете, может можно как-то избежать наложения меток?
Вертикальное позиуионирование решает это проблему, но начальство сказало. что метки должны мыть горизонтальны... :(
Спасиб.
PM MAIL   Вверх
Ares4322
Дата 18.5.2012, 14:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 339
Регистрация: 25.9.2007
Где: Россия, Москва

Репутация: 1
Всего: 3



rollUnitType используется в методе http://www.jfree.org/jfreechart/api/javado...t.html#line.269 
Я так понял, что этот метод сдвигает переданную ему дату, на величину, пропорциональную  rollUnitType и rollMultiple.

Без переделки исходников, мне кажется, не обойтись.

PM MAIL   Вверх
Killer_13
Дата 18.5.2012, 15:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 12.1.2008
Где: Germany

Репутация: нет
Всего: 1



Цитата

Я так понял, что этот метод сдвигает переданную ему дату, на величину, пропорциональную  rollUnitType и rollMultiple.
 - что не приближает к решению задачи..
Цитата

Без переделки исходников, мне кажется, не обойтись.
 - мне кажется начальство не одобрит любое вмешательство в библиотеку.. :(

блин. нехорошо.. придется рапортовать, что нельзя такое сделать..
PM MAIL   Вверх
Ares4322
Дата 18.5.2012, 15:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 339
Регистрация: 25.9.2007
Где: Россия, Москва

Репутация: 1
Всего: 3



Ну можно только попробовать так: при построении определять интервал и задавать через setDateFormatOverride() формат необходимой точности. Но в данном случае не получится, например, в сутки поместить 24 метки, так как они тупо могут не влезть по ширине и надо менять размер шрифта. Спросите у начальства, может так пойдет?
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0597 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.