Помогите с TAChart

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

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

Re: Помогите с TAChart

Сообщение Ask » 28.01.2011 19:41:37

VAshot писал(а):Но один в один вывод на принтер маловероятен, фон там поменять, размер заголовка. Сейчас через временный чарт делал, глупо.
Может некое свойство добавить в котором можно задать наиболее вероятные изменяемые свойства при печати?


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

PrintChart.Assign(Chart1);
PrintChart.Title.Font := 14;
PrintChart.PaintOnCanvas(Printer.Canvas);

Patches welcome ;-)

По поводу управления масштабом:
TAChart работает с тремя координатными системами: axis, graph и image -- соответственно координаты
на осях (aka объектные), на общем графике (aka мировые), и на экране (aka экранные).
При отрисовке, например, точки в TLineSeries преобразование из axis в graph делается функцией
AxisToGraph по следующему алгоритму:
1) Определяются оси, к которым привязана серия -- свойства AxisIndexX и AxisIndexY
2) Для каждой оси вызывается AxisTransformations
3) Если AxisIndexX задаёт вертикальную ось, а AxisIndexY -- горизинтальную (функция IsRotated),
то выполняется поворот на 90 градусов

Если оси не указаны (-1) или не имеют трансформаций, то считается, что мировые координаты равны объектным.

AxisTransformations -- это компонента, содержащая список преобразований, которые выполняются последовательно.
Примеры преобразований -- линейное (масштаб, перенос), логарифмическое, автоматическое линейное.
В будущем планируются другие преобразования.

Операция Zoom влияет на преобразование из мировых координат в экранные, поэтому напрямую
сдалять, чтобы она влияла только на часть осей, нельзя.
Можно (не меняя код TAChart) сделать другой инструмент масштабирования,
который будет менять только преобразование одной оси -- но только мне совершенно непонятно,
зачем такое может понадобиться.
Ask
постоялец
 
Сообщения: 163
Зарегистрирован: 25.12.2008 03:51:37

Re: Помогите с TAChart

Сообщение VAshot » 28.01.2011 20:41:34

Понадобится такое может в случае двух графиков.
Например, скорость и температура.
Допустим, скорость от минус 300 до плюс 300 и температура от -30 до +30.
График скорости в какой-то период времени в плюсе, а температура в минусе.
Детализируя скорость от 100 до 200, получим температуру от 10 до 20 и, соответственно, не увидим ее график. А так, мы видели бы график скорости полностью. Подходит для данных (на месте температуры), когда не нужна детализация (вспомогательные данные) либо диапазон маленьки (и без увеличения всё видно).

Может быть не инструмент делать, а некое преобразование добавить, которое будет подбирать коэффициенты смещения и масштаба для нужных осей, и держать на экране нужные заданные в нем минимум и максимум. Во время его использования исключаются другие виды преобразования, кроме лог. Пригодится не только для данного случая.


К вопросу о формате временной оси.
Сейчас свойство с набором флагов для включени разных масштабов. Сделать такое же свойство, но с набором строк с форматом. Визуально будет раскрывающийся параметр с подпараметрами для каждого масштаба в виде текстового поля. Если они не заданы, то как сейчас. Возможна ли такая реализация - не знаю.
Аватара пользователя
VAshot
постоялец
 
Сообщения: 128
Зарегистрирован: 01.11.2007 12:31:21
Откуда: Пермь

Re: Помогите с TAChart

Сообщение Ask » 02.02.2011 07:41:24

VAshot писал(а):Понадобится такое может в случае двух графиков.
Например, скорость и температура.
Допустим, скорость от минус 300 до плюс 300 и температура от -30 до +30.
График скорости в какой-то период времени в плюсе, а температура в минусе.
Детализируя скорость от 100 до 200, получим температуру от 10 до 20 и, соответственно, не увидим ее график. А так, мы видели бы график скорости полностью. Подходит для данных (на месте температуры), когда не нужна детализация (вспомогательные данные) либо диапазон маленьки (и без увеличения всё видно).

Может быть не инструмент делать, а некое преобразование добавить, которое будет подбирать коэффициенты смещения и масштаба для нужных осей, и держать на экране нужные заданные в нем минимум и максимум. Во время его использования исключаются другие виды преобразования, кроме лог. Пригодится не только для данного случая.


См. axistransfdemo начиная с ревизии 29308.
Там показано независимое масштабирование для одной из осей (надо включить "Auto scale", и потом менять коэффициент в SpinEdit).
На более общий случай расширяется по аналогии.
Ask
постоялец
 
Сообщения: 163
Зарегистрирован: 25.12.2008 03:51:37

Re: Помогите с TAChart

Сообщение VAshot » 13.03.2011 12:46:18

Вы настоящий укротитель графиков :)

Но я так и не понял, как добиться следующего (масштабируем синий график отложенный по левой оси, зеленый - по правой):
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
VAshot
постоялец
 
Сообщения: 128
Зарегистрирован: 01.11.2007 12:31:21
Откуда: Пермь

Re: Помогите с TAChart

Сообщение Ask » 15.03.2011 21:28:24

как добиться следующего (масштабируем синий график отложенный по левой оси, зеленый - по правой)

Хм, Я думал, что из демо понятно.
Обновил демо в r29856 -- см. страницу "Independent scale".

Кстати, по поводу вывода на принтер -- есть прогресс, см. printdemo.
Ask
постоялец
 
Сообщения: 163
Зарегистрирован: 25.12.2008 03:51:37

Re: Помогите с TAChart

Сообщение btr0001 » 06.01.2012 14:18:46

Привет всем. Рад, что нашел такую тему, хотя рассматриваемые в ней вопросы для меня высший пилотаж. Хотелось бы узнать банальное прозаическое: где взять документацию, помощь по компоненту. В вики есть чуть-чуть, но оно годится скорее для ознакомления в общих чертах.
btr0001
незнакомец
 
Сообщения: 9
Зарегистрирован: 07.12.2009 13:25:40

Re: Помогите с TAChart

Сообщение Nik » 06.01.2012 18:59:28

2btr0001
Посмотрите для начала примеры, которые идут в комплекте с компонентом - самые простые возможности там довольно наглядно показаны (на первых порах ожно просто таскать код из примеров в свою программу).
Аватара пользователя
Nik
энтузиаст
 
Сообщения: 573
Зарегистрирован: 04.02.2006 00:08:09
Откуда: Киров

Re: Помогите с TAChart

Сообщение Little_Roo » 07.01.2012 00:01:26

VAshot писал(а):Вы настоящий укротитель графиков

Прошу ногами не пинать - а как Вы сделали такое сглаживание графиков?
Простым перебором- не нашел...или фишка какая-то есть???
Если есть точки - из базы данных - строится график (средний балл учащихся) - но как гребенку...не кошерно... :shock:


Lazarus 0.9.31 r34608 FPC 2.6.0 i386-win32-win32/win64
Аватара пользователя
Little_Roo
энтузиаст
 
Сообщения: 639
Зарегистрирован: 27.02.2009 19:56:36
Откуда: Санкт-Петербург

Re: Помогите с TAChart

Сообщение btr0001 » 07.01.2012 09:54:00

Little_Roo писал(а):Посмотрите для начала примеры, которые идут в комплекте с компонентом - самые простые возможности там довольно наглядно показаны (на первых порах ожно просто таскать код из примеров в свою программу).

Уточните, какие примеры Вы имеете ввиду. Я вижу только Barchart, по которому ничего не научишся. Я понял, что справки по компоненту не существует?
btr0001
незнакомец
 
Сообщения: 9
Зарегистрирован: 07.12.2009 13:25:40

Re: Помогите с TAChart

Сообщение VAshot » 07.01.2012 10:18:32

Little_Roo писал(а):Прошу ногами не пинать - а как Вы сделали такое сглаживание графиков?
Простым перебором- не нашел...или фишка какая-то есть???
Если есть точки - из базы данных - строится график (средний балл учащихся) - но как гребенку...не кошерно... :shock:

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

Либо вами по точкам проводится аппроксимация/интерполяция одной функцией и отрисовывается она, а не точки соединенные прямой.
Естественно, кривые (точки или прямые отрезки расчетной кривой) рисуются с маленьким шагом, чтоб плавно было.

А то, что выше - это тупо графический редактор для примера того, что я хотел)))


Да, не все данные есть смысл рисовать гладко. Промежуточное расчетное значение у вас будет иметь какой-то смысл? Вы ведь изначально, вроде бы, хотите отражать дискретные данные - сглаживание может быть лишним. А вот график температуры за окном вполне логично сглаживать - её природа не дискретна. Гребёнка - не единственный вид графиков ;)
Аватара пользователя
VAshot
постоялец
 
Сообщения: 128
Зарегистрирован: 01.11.2007 12:31:21
Откуда: Пермь

Re: Помогите с TAChart

Сообщение Nik » 07.01.2012 12:19:49

btr0001 писал(а):Уточните, какие примеры Вы имеете ввиду. Я вижу только Barchart, по которому ничего не научишся. Я понял, что справки по компоненту не существует?


Если у вас Windows, то ищите примеры по Tachart здесь: c:\lazarus\components\tachart\demo
Аватара пользователя
Nik
энтузиаст
 
Сообщения: 573
Зарегистрирован: 04.02.2006 00:08:09
Откуда: Киров

Re: Помогите с TAChart

Сообщение Ask » 07.01.2012 16:22:47

Little_Roo писал(а):Прошу ногами не пинать - а как Вы сделали такое сглаживание графиков?
Простым перебором- не нашел...или фишка какая-то есть???
Если есть точки - из базы данных - строится график (средний балл учащихся) - но как гребенку...не кошерно... :shock:


Для сглаживания можно использовать один или несколько из следующих методов:
1) B-Сплайны (http://wiki.lazarus.freepascal.org/TAChart_documentation#B-spline_series)
2) Кубические сплайны (http://wiki.lazarus.freepascal.org/TAChart_documentation#Cubic_spline_series)
3) Вычисляемые серии с методом camAverage (http://wiki.lazarus.freepascal.org/TAChart_documentation#Calculated_source)
4) Собственный алгоритм сглаживания (например, сплайны высоких порядков или окна с неравномерными весами)
с помощью TUserDefinedSource или TFuncSeries.

Для первых трёх пунктов в текущей версии TAChart есть примеры.
Ask
постоялец
 
Сообщения: 163
Зарегистрирован: 25.12.2008 03:51:37

Re: Помогите с TAChart

Сообщение Xenar » 10.01.2012 08:24:54

Чтобы не плодить одинаковые по названию темы, пишу здесь со следующим вопросом.
Изображение
Как видно на картинке зарезаются метки с левого и правого края графика. Как расширить область которую я указал красными стрелочками?
Аватара пользователя
Xenar
постоялец
 
Сообщения: 158
Зарегистрирован: 08.06.2011 12:54:07

Re: Помогите с TAChart

Сообщение btr0001 » 10.01.2012 10:48:12

Nik писал(а):Если у вас Windows, то ищите примеры по Tachart здесь: c:\lazarus\components\tachart\demo

Не виндовс, но спасибо, нашел, поизучаю.
btr0001
незнакомец
 
Сообщения: 9
Зарегистрирован: 07.12.2009 13:25:40

Re: Помогите с TAChart

Сообщение Ask » 11.01.2012 00:31:14

Xenar писал(а):Как видно на картинке зарезаются метки с левого и правого края графика.

На большинстве отрисовщиков можно установить
Код: Выделить всё
Marks.Clipped := false


Xenar писал(а):Как расширить область которую я указал красными стрелочками?

http://wiki.lazarus.freepascal.org/TAChart_documentation#Margins
Ask
постоялец
 
Сообщения: 163
Зарегистрирован: 25.12.2008 03:51:37

Пред.След.

Вернуться в Lazarus

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

Сейчас этот форум просматривают: Yandex [Bot] и гости: 252

Рейтинг@Mail.ru