Форум программистов, компьютерный форум, киберфорум
Lazarus
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/21: Рейтинг темы: голосов - 21, средняя оценка - 4.57
Asm/C++/Delphi/Py/PHP/VBA
6528 / 1973 / 228
Регистрация: 14.12.2014
Сообщений: 4,125
Записей в блоге: 12
1

TChart - подписи по осям

29.11.2017, 23:14. Показов 4135. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Я добавляю точки через AddXY и хочу, чтобы подписи были с градацией по целым числам (вообще, у меня значения и X, и Y целые). И чтобы не было по 3 одинаковых значения (типа 0 0 0 1 1 1 2 2 2 3 3 3). Как это сделать?
И можно ли изменить толщину линии графика?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.11.2017, 23:14
Ответы с готовыми решениями:

TChart в Лазарусе: задать шаг по осям
Никак на могу в TChart лазаруса задать шаг по осям - ставит всё автоматически. Например, хочу по...

Цвет текста меток по осям в компоненте TChart
Понадобилось сделать график с черным фоном. В компоненте TChart нашел как менять цвет фона, нашел...

Подписи к значениям TChart по оси Х
Проблема заключается в том, что подписи все одинаковые. Знаю что код не правильный, но как...

Подписи к осям
Здравствуйте! Подскажите, пожалуйста, как удалить определенные цифры с осей графика, при этом...

7
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32835 / 21172 / 8148
Регистрация: 22.10.2011
Сообщений: 36,431
Записей в блоге: 8
29.11.2017, 23:24 2
Цитата Сообщение от Jin X Посмотреть сообщение
можно ли изменить толщину линии графика?
Можно. Для серии выставить нужную толщину через LinePen.Width (я правильно понимаю, что это TLineSeries?)
Цитата Сообщение от Jin X Посмотреть сообщение
хочу, чтобы подписи были с градацией по целым числам
Можно на скрине показать, что есть сейчас, и чего хотелось бы получить?
0
Asm/C++/Delphi/Py/PHP/VBA
6528 / 1973 / 228
Регистрация: 14.12.2014
Сообщений: 4,125
Записей в блоге: 12
29.11.2017, 23:42  [ТС] 3
Вот так сейчас:
TChart - подписи по осям

Вот так надо:
TChart - подписи по осям

Т.е. чтобы сетка была точно на целых значениях, а не где-то в промежутках (по сути же, на первой картинке 1 - это не 1, а 0.845, например, или 1.453; и 45, 46, 46, 47 - это по факту что-то вроде 45.1, 45.9, 46.7, 47.4; просто формат задан целый: %0:.0n)
0
Asm/C++/Delphi/Py/PHP/VBA
6528 / 1973 / 228
Регистрация: 14.12.2014
Сообщений: 4,125
Записей в блоге: 12
29.11.2017, 23:45  [ТС] 4
Вот так, по сути, на самом деле...
TChart - подписи по осям
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32835 / 21172 / 8148
Регистрация: 22.10.2011
Сообщений: 36,431
Записей в блоге: 8
30.11.2017, 11:42 5
Хм... Смотри. Я делаю так:

1) чтобы не было дублирующихся значений по осям - можно даже без изменения Format-а просто написать вот такой обработчик OnMarkToText для оси:
Pascal
1
2
3
4
5
procedure TForm1.Chart1AxisList0MarkToText(var AText: String; AMark: Double);
begin
  if SameValue(AMark, round(AMark), 0.0001) then AText := IntToStr(round(AMark)) // uses Math для SameValue
  else AText := '';
end;
, тогда отметка будет ставиться именно там, где действительно целое значение, а не там, где согласно примененному Format-у получится это самое целое (а получаться оно будет везде, где чарт захочет поставить подпись на осях).

2) ну, а для того, чтобы показать линии грида только там, где стоят отметки (то есть, на целых значениях по осям) я обычно добавляю динамически TConstantLine-ы (хочешь - сразу при старте приложения, ты же примерно все равно знаешь, в каком интервале у тебя изменяются значения на графике, хочешь - храни список уже добавленных TConstantLine, а при очередном добавлении через AddXY в свою серию просто смотри, если добавляемое по X или по Y значение еще не присутствует в списке - то добавить; 10 строк кода все удовольствие), а стандартную отрисовку гридов отключаю. Как-то вот так получается:
Миниатюры
TChart - подписи по осям  
0
Asm/C++/Delphi/Py/PHP/VBA
6528 / 1973 / 228
Регистрация: 14.12.2014
Сообщений: 4,125
Записей в блоге: 12
30.11.2017, 12:11  [ТС] 6
Вариант через OnMarkToText вообще не подходит, т.к. эта целая отметка всё равно будет не там, где надо, а мимо целого значения. Т.е. чарт будет вызывать OnMarkToText для AMark = 0.8, 1.6, 2.4, 3.2, например... А мне надо, чтобы линии отрисовывались точно в целых позициях.

Динамическое добавление TConstantLine-ов похоже на костыль. Неужели нет реально способа сделать это, просто задав нужные параметры осей???
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32835 / 21172 / 8148
Регистрация: 22.10.2011
Сообщений: 36,431
Записей в блоге: 8
30.11.2017, 12:31 7
Цитата Сообщение от Jin X Посмотреть сообщение
А мне надо, чтобы линии отрисовывались точно в целых позициях
С тобой спорить - себе дороже. Зря связался, тебя все равно не переубедишь, ты даже не пробуешь а уже отметаешь то, что тебе непонятно. Ну, делай сам, как знаешь. Чтобы все было ТОЧНО там, где тебе хочется.

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

P.S.
Цитата Сообщение от Jin X Посмотреть сообщение
чарт будет вызывать OnMarkToText для AMark = 0.8, 1.6, 2.4, 3.2, например
Да ты еще и читать не умеешь, как выяснилось. На код вообще не смотрел, что-ли? Ну, вызвался метод при AMark = 0.8, и что? Что вернется в качестве AText? Метод все равно будет вызываться, хочешь ты этого или нет, обрабатываешь ты его или нет, просто можно отсечь то, что тебе не нужно. А уж чтоб метод вообще не вызывался тогда, когда значение не является целым... Исходники чарта открыты. Бери, переписывай под себя. Больше никому такие извраты не нужны.
0
Asm/C++/Delphi/Py/PHP/VBA
6528 / 1973 / 228
Регистрация: 14.12.2014
Сообщений: 4,125
Записей в блоге: 12
30.11.2017, 17:59  [ТС] 8
Цитата Сообщение от volvo Посмотреть сообщение
С тобой спорить - себе дороже. Зря связался, тебя все равно не переубедишь, ты даже не пробуешь а уже отметаешь то, что тебе непонятно. Ну, делай сам, как знаешь. Чтобы все было ТОЧНО там, где тебе хочется.
С чего ты взял, что я не пробовал? Я попробовал и получилось вот что (левая ось)...
TChart - подписи по осям

Все координаты на графике (X и Y) целые. Соответственно, тут видно, что линии идут мимо графика. И подписей нет.
Может, надо какие-то опции особые в LeftAxis.Interval выставить – не знаю...

Цитата Сообщение от volvo Посмотреть сообщение
Да ты еще и читать не умеешь, как выяснилось. На код вообще не смотрел, что-ли? Ну, вызвался метод при AMark = 0.8, и что? Что вернется в качестве AText?
Ты сам-то понимаешь, что пишешь?
Как то, что выводится в качестве AText должно повлиять на позицию (координату) линии, которая будет отрисована?
0
30.11.2017, 17:59
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.11.2017, 17:59
Помогаю со студенческими работами здесь

Подписи к осям на графике
Здравствуйте! Подскажите, пожалуйста, с таким вопросом: нужно разбить оси, как на графике, который...

Формат значений по осям в tchart
Здравствуйте, подскажите, пожалуйста, как привести значения в нормальный формат (например...

TChart - Формат подписей по осям
Использую TCart из XE6. Мне необходимо, чтобы все подписи по оси ординат (LeftAxis) были...

Измение подписей к координатным осям TChart
Здравствуйте. Вопрос, кажется, должен быть довольно тривиален, но тем не менее гуглением и поиском...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru