Ось дат в TChart

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

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

Ответить
FairyFenix
незнакомец
Сообщения: 7
Зарегистрирован: 14.08.2020 16:04:32

Ось дат в TChart

Сообщение FairyFenix »

Доброго времени суток, форумчане. Уже давно висит одна проблема, связанная с TChart, а именно то, что тип DataTime при выполнении функции AddXY принудительно приводиться к типу Double (или к иному целочисленному типу). Подробно: Мне необходимо графически показать распределение численности по датам. Код для наглядности:

Код: Выделить всё

TCubicSplineSeries1.AddXY(Query1.FieldByName('data').AsDateTime,Query1.FieldByName('col').AsInteger);

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

Использую Lazarus 2.0.6. Может кто подсказать в какую сторону смотреть, что решить эту проблему?
mig-31
постоялец
Сообщения: 224
Зарегистрирован: 14.07.2011 13:46:48

Сообщение mig-31 »

Выберите ось TChart, потом Marks -> Source -> TDateTimeIntervalChartSource и Style -> smsLabel
FairyFenix
незнакомец
Сообщения: 7
Зарегистрирован: 14.08.2020 16:04:32

Сообщение FairyFenix »

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

К сожалению параметр "TDateTimeIntervalChartSource" отсутствует в свойстве Source. Можно выбрать только пустой параметр. Если попытаться вставить TDateTimeIntervalChartSource в Source принудительно, то Lazarus выдает, что это недопустимый параметр (пробовал и со стилем smsValue и с smsLabel).
Аватара пользователя
Снег Север
долгожитель
Сообщения: 3067
Зарегистрирован: 27.11.2007 15:14:47
Контактная информация:

Сообщение Снег Север »

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 есть?
FairyFenix
незнакомец
Сообщения: 7
Зарегистрирован: 14.08.2020 16:04:32

Сообщение FairyFenix »

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

Добавлено спустя 15 минут 54 секунды:
Осталось теперь понять почему при значении свойства Steps (компонента TDateTimeIntervalChartSource) [dtsYear,dtsMonth,dtsDay] ось вообще перестает отображать даты (если добавить туда хотя бы dtsHour все работает, но подписи на оси превращаются в кашу: одна дата наслаивается на другую (мне почасовая статистика не нужна, отслеживается численность по дням)).
mig-31
постоялец
Сообщения: 224
Зарегистрирован: 14.07.2011 13:46:48

Сообщение mig-31 »

Вам TDateTimeIntervalChartSource нужно положить из палетты компонентов Лазарус, закладка Chart. TDateTimeIntervalChartSource появится в Marks -> Source -> TDateTimeIntervalChartSource.
Ответить