Ось дат в TChart

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Ось дат в TChart

Сообщение FairyFenix » 17.09.2020 11:28:15

Доброго времени суток, форумчане. Уже давно висит одна проблема, связанная с TChart, а именно то, что тип DataTime при выполнении функции AddXY принудительно приводиться к типу Double (или к иному целочисленному типу). Подробно: Мне необходимо графически показать распределение численности по датам. Код для наглядности:
Код: Выделить всё
TCubicSplineSeries1.AddXY(Query1.FieldByName('data').AsDateTime,Query1.FieldByName('col').AsInteger);

В итоге на оси X получается ахинея. Смысл свойства AtDataOnly я не понял (изменений при переводе его в True не наблюдается). В сети находил всякие свойства DateTimeFormat, TDateTimeIntervalChartSource и т.д., но я все у себя перерыл - таких свойств не нашел.

Использую Lazarus 2.0.6. Может кто подсказать в какую сторону смотреть, что решить эту проблему?
FairyFenix
незнакомец
 
Сообщения: 7
Зарегистрирован: 14.08.2020 17:04:32

Re: Ось дат в TChart

Сообщение mig-31 » 21.09.2020 16:07:52

Выберите ось TChart, потом Marks -> Source -> TDateTimeIntervalChartSource и Style -> smsLabel
mig-31
постоялец
 
Сообщения: 221
Зарегистрирован: 14.07.2011 13:46:48

Re: Ось дат в TChart

Сообщение FairyFenix » 22.09.2020 10:00:15

mig-31 писал(а):Выберите ось TChart, потом Marks -> Source -> TDateTimeIntervalChartSource и Style -> smsLabel

К сожалению параметр "TDateTimeIntervalChartSource" отсутствует в свойстве Source. Можно выбрать только пустой параметр. Если попытаться вставить TDateTimeIntervalChartSource в Source принудительно, то Lazarus выдает, что это недопустимый параметр (пробовал и со стилем smsValue и с smsLabel).
FairyFenix
незнакомец
 
Сообщения: 7
Зарегистрирован: 14.08.2020 17:04:32

Re: Ось дат в TChart

Сообщение Снег Север » 22.09.2020 10:30:04

FairyFenix
Date-time interval source
TDateTimeIntervalChartSource is similar to the TIntervalChartSource, but provides marks formatted as date/time values. This source automatically selects appropriate calendar interval (such as week or hour) depending on the axis scale.
Note that X values of provided data items are TDateTime values, and Label values contain formatted date-time strings. If you want to use TDateTimeIntervalChartSource as the source of axis marks, you should probably set Marks.Format or Marks.Style properties to make use of provided labels.
If the DateTimeFormat property is set, it is used to format all labels. Formatting is performed with standard SysUtils.FormatDateTime function. If DateTimeFormat is empty, format is chosen automatically based on scale.

У вас Marks.Format и Marks.Style выставлены правильно? Компонент TDateTimeIntervalChartSource есть?
Аватара пользователя
Снег Север
долгожитель
 
Сообщения: 2641
Зарегистрирован: 27.11.2007 16:14:47

Re: Ось дат в TChart

Сообщение FairyFenix » 22.09.2020 12:00:07

Премного благодарен. Покопался в этом направлении, вроде бы все привел к примерно тому, что требуется.

Добавлено спустя 15 минут 54 секунды:
Осталось теперь понять почему при значении свойства Steps (компонента TDateTimeIntervalChartSource) [dtsYear,dtsMonth,dtsDay] ось вообще перестает отображать даты (если добавить туда хотя бы dtsHour все работает, но подписи на оси превращаются в кашу: одна дата наслаивается на другую (мне почасовая статистика не нужна, отслеживается численность по дням)).
FairyFenix
незнакомец
 
Сообщения: 7
Зарегистрирован: 14.08.2020 17:04:32

Re: Ось дат в TChart

Сообщение mig-31 » 22.09.2020 15:29:31

Вам TDateTimeIntervalChartSource нужно положить из палетты компонентов Лазарус, закладка Chart. TDateTimeIntervalChartSource появится в Marks -> Source -> TDateTimeIntervalChartSource.
mig-31
постоялец
 
Сообщения: 221
Зарегистрирован: 14.07.2011 13:46:48


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: Bing [Bot], Google [Bot] и гости: 4

Рейтинг@Mail.ru