TChart, абсциссы -pi, -pi/2, 0, pi/2, pi, 3pi/2 ...

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

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

TChart, абсциссы -pi, -pi/2, 0, pi/2, pi, 3pi/2 ...

Сообщение forlazarus » 28.10.2021 12:05:52

Здравствуйте.
Рисую графики функций на отрезке, используя TChart. Хотелось бы, чтобы точки оси абсцисс указывались не числами вида 1, 2, 3 и т.п., а точками -pi, -pi/2, 0, pi/2, pi, 3pi/2, 2pi...
Подскажите, что и как изменить в Chart1, Chart1.BottomAxis или Chart1LineSeries1.

Например, так (сделано в KmPlot):
ИзображениеИзображение


Спасибо за помощь.
forlazarus
новенький
 
Сообщения: 11
Зарегистрирован: 28.10.2021 11:29:33

Re: TChart, абсциссы -pi, -pi/2, 0, pi/2, pi, 3pi/2 ...

Сообщение DedFrend » 31.10.2021 12:57:37

Могу предложить такой вариант

https://disk.yandex.ru/d/LncUi3gVlD4BUQ

Откровенно говоря, я считаю самым правильным в таких случаях просто делать подпись к оси
вида "X. *pi" . Потому что в том виде, как вы хотите, вы неизбежно огребете проблем в виде
перекрывающихся или недописанных marks .
Кстати с самой подписью у меня не заладилось. Свойство Title.caption имеется, но подпись не видна.
Разбираться пока лень
DedFrend
постоялец
 
Сообщения: 156
Зарегистрирован: 25.11.2018 12:21:50

Re: TChart, абсциссы -pi, -pi/2, 0, pi/2, pi, 3pi/2 ...

Сообщение Снег Север » 31.10.2021 14:40:38

Демки изучайте. В частности - axis.
Page Customized marks demonstrates how painting of the marks of an axis can be controlled by modifying their properties, such as Marks.LabelBrush, Marks.Frame, or Marks.LabelFont. Highlighting of individual marks can be done by assigning a handler to the axis event OnMarksToText:
Код: Выделить всё
procedure TForm1.ChartCustomMarksAxisList1MarkToText(var AText: String; AMark: Double);
begin
  if AMark = 3 then
    AText := '*' + AText + '*';
end;
Аватара пользователя
Снег Север
долгожитель
 
Сообщения: 3051
Зарегистрирован: 27.11.2007 16:14:47

Re: TChart, абсциссы -pi, -pi/2, 0, pi/2, pi, 3pi/2 ...

Сообщение forlazarus » 31.10.2021 18:35:44

DedFrend писал(а):Могу предложить такой вариант

https://disk.yandex.ru/d/LncUi3gVlD4BUQ

Откровенно говоря, я считаю самым правильным в таких случаях просто делать подпись к оси
вида "X. *pi" . Потому что в том виде, как вы хотите, вы неизбежно огребете проблем в виде
перекрывающихся или недописанных marks .
Кстати с самой подписью у меня не заладилось. Свойство Title.caption имеется, но подпись не видна.
Разбираться пока лень

ИзображениеИзображение
Поработал с вашим примером, вот, что получилось.
https://piccy.info/view3/15129621/eff85 ... ad03/orig/
Снег Север писал(а):ChartCustomMarksAxisList1MarkToText

Спасибо за наводку.
Немного позже, будет время, напишу подробнее.
forlazarus
новенький
 
Сообщения: 11
Зарегистрирован: 28.10.2021 11:29:33

Re: TChart, абсциссы -pi, -pi/2, 0, pi/2, pi, 3pi/2 ...

Сообщение DedFrend » 31.10.2021 19:49:50

Интересные у вас ссылки. Второй раз получаю "Your IP is blacklisted"
DedFrend
постоялец
 
Сообщения: 156
Зарегистрирован: 25.11.2018 12:21:50

Re: TChart, абсциссы -pi, -pi/2, 0, pi/2, pi, 3pi/2 ...

Сообщение forlazarus » 01.11.2021 07:48:23

DedFrend писал(а):Интересные у вас ссылки. Второй раз получаю "Your IP is blacklisted"

Выбрал первый попавшийся хостинг картинок в поисковике, извините.

Изменённый ваш проект:
https://disk.yandex.ru/d/0z26gWNGzbStBA

Итоги.
Работают следующие вещи:
Ваша находка - XdivPi.Scale := pi;
Выставление
fmPiForm.Chart1.BottomAxis.Intervals.Count:=round(abs(Xmax-Xmin)/pi)*2;
(не спрашивайте почему так, эмпирически подобрал)
fmPiForm.Chart1.BottomAxis.Intervals.nicesteps='0.5|1.0'
fmPiForm.Chart1.BottomAxis.Intervals.Options:=[aipUseCount,aipUseNiceSteps]
Находка Снег Север'a - cобытие OnMarkToText для BottomAxis,
моя функция getstringforrealpi по превращению десятичных дробей в простые...

P.S. Если ссылка недоступна, скажите, попробую отправить иначе.
forlazarus
новенький
 
Сообщения: 11
Зарегистрирован: 28.10.2021 11:29:33


Вернуться в Lazarus

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 16

Рейтинг@Mail.ru