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

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

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

Ответить
forlazarus
новенький
Сообщения: 15
Зарегистрирован: 28.10.2021 10:29:33

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

Сообщение forlazarus »

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

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


Спасибо за помощь.
DedFrend
постоялец
Сообщения: 157
Зарегистрирован: 25.11.2018 11:21:50

Сообщение DedFrend »

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

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

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

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

Демки изучайте. В частности - 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;
forlazarus
новенький
Сообщения: 15
Зарегистрирован: 28.10.2021 10:29:33

Сообщение forlazarus »

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

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

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

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

Спасибо за наводку.
Немного позже, будет время, напишу подробнее.
DedFrend
постоялец
Сообщения: 157
Зарегистрирован: 25.11.2018 11:21:50

Сообщение DedFrend »

Интересные у вас ссылки. Второй раз получаю "Your IP is blacklisted"
forlazarus
новенький
Сообщения: 15
Зарегистрирован: 28.10.2021 10:29:33

Сообщение forlazarus »

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. Если ссылка недоступна, скажите, попробую отправить иначе.
Ответить