Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
 Аватар для Stick
4 / 4 / 1
Регистрация: 26.11.2009
Сообщений: 156

TChart не рисуются отрицательные значения по оси OY

05.06.2018, 16:01. Показов 2037. Ответов 18
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Значение по ОУ разные от - 9 999 999.999 до 4294967295 (может и больше) для хранения выбрал
long double. Проблема в том, что при выводе отрицательных чисел с количеством знаков 6 и более (-111.111) на ось ОУ не выводится ничего. При этом сам график рисуется. В чем может быть проблема? C++ Builder 6. Спасибо!
Миниатюры
TChart не рисуются отрицательные значения по оси OY  
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
05.06.2018, 16:01
Ответы с готовыми решениями:

TChart, значения по оси Х
Здравствуйте! Скажите, пожалуйста, как сделать так, чтоб при нажатии на серию можно было посмотреть значения по х всех точек этой серии?

Как подписывать в TChart значения по оси Х?
Здравствуйте! Нужно создать график, берущий свои значения из StringGrid, в принципе вот оно: begin Chart1LineSeries1.Title:=...

Отрицательные значения по шкале TChart
Подскажите пожалуйста, как сделать так, чтобы вместо нулей были отрицательные значения

18
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33374 / 21499 / 8235
Регистрация: 22.10.2011
Сообщений: 36,894
Записей в блоге: 11
05.06.2018, 16:28
Нужен код заполнения чарта. А лучше - проект. Потому что на чистом проекте проверил - и 6- и 7-значное значение, все отображается.
0
 Аватар для Stick
4 / 4 / 1
Регистрация: 26.11.2009
Сообщений: 156
06.06.2018, 11:12  [ТС]
Собственно вот такой момент:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void __fastcall TForm1::Button1Click(TObject *Sender)
{
        unsigned long int x = 0;
        unsigned long int mSize = 2048;
        int64_t y = 0;
        long double dy = 0;
 
        for(unsigned long int j=0;j<mSize;j++)
        {
            x = j;
            ch->LeftAxis->Automatic = true;
            ch->Series[0]->AddXY((double)x,-11111.111);
        }
}
Вложения
Тип файла: rar pr.rar (399.3 Кб, 2 просмотров)
0
 Аватар для Stick
4 / 4 / 1
Регистрация: 26.11.2009
Сообщений: 156
06.06.2018, 11:32  [ТС]
И мне нужно выводить такого формата числа:
C++
1
ch->Series[0]->AddXY((double)x, 3333333333.44444444);
То получаю соответственно переполнение
Миниатюры
TChart не рисуются отрицательные значения по оси OY  
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33374 / 21499 / 8235
Регистрация: 22.10.2011
Сообщений: 36,894
Записей в блоге: 11
06.06.2018, 11:32
По одному значению на оси что ты хочешь, чтобы грид тебе рисовал? Сделай вот так:
C++
1
ch->Series[0]->AddXY((double)x,-11111.111*j);
, и убедись, что и отрицательные значения отображаются как положено.

P.S. Automatic совершенно не обязательно выставлять в true на каждой итерации, достаточно сделать это один раз перед циклом...
0
 Аватар для Stick
4 / 4 / 1
Регистрация: 26.11.2009
Сообщений: 156
06.06.2018, 15:07  [ТС]
volvo, Вы правы! При динамике значения выводятся! Automatic не туда вынес.
Беда в том, что где-то У может вообще не меняться.
Вы знаете как быть в такой ситуации?

Добавлено через 3 часа 12 минут
И ещё момент. Как в программе переключить вывод времени для оси OY? Например, есть пара чисел:
[x, y]
0, 10
1, 65
2, 125
было бы здорово видеть результат в виде:
[x, HH:MM:SS]
0, 00:00:10
1, 00:01:05
2, 00:02:05

Искал подробное описание методов класса TChart - не нашел. может быть кто-то знает где его найти? В help'е малова-то информации
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33374 / 21499 / 8235
Регистрация: 22.10.2011
Сообщений: 36,894
Записей в блоге: 11
06.06.2018, 16:44
Цитата Сообщение от Stick Посмотреть сообщение
Вы знаете как быть в такой ситуации?
Знаю. В такой ситуации не выставлять LeftAxis->Automatic в true. Вообще. Пусть будет False, а Minimum и Maximum выставить вручную. И Labels - Style для левой оси выставить в Text, а не в Auto. А для нижней оси - в Value, а не в Auto. И вот тогда при цикле
C++
1
2
3
4
5
        for(unsigned long int j=0;j<mSize;j++)
        {
            x = j;
            ch->Series[0]->AddXY((double)x,-11111.111, FloatToStr(-11111.111));
        }
ты получишь ожидаемое:
Миниатюры
TChart не рисуются отрицательные значения по оси OY  
1
 Аватар для Stick
4 / 4 / 1
Регистрация: 26.11.2009
Сообщений: 156
06.06.2018, 17:36  [ТС]
Великолепно!
А как быть с видом сетки? Если style выставляю lauto, то сетка ровная, если lmark или ltext то, в зависимости от пиков на графике ставятся линии. Можно как-то сделать , чтобы сетка была равномерной?

Ой. Разобрался. Style = lValue.
Миниатюры
TChart не рисуются отрицательные значения по оси OY   TChart не рисуются отрицательные значения по оси OY   TChart не рисуются отрицательные значения по оси OY  

0
 Аватар для Stick
4 / 4 / 1
Регистрация: 26.11.2009
Сообщений: 156
18.06.2018, 11:32  [ТС]
Тут возник такой момент, volvo, не могу одновременно нарисовать по оси У большое число и по оси Х время (при задании talText выводится время по оси У)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
void __fastcall TForm1::Button1Click(TObject *Sender)
{
        unsigned long int x = 0;//uint64_t x;
        unsigned long int mSize = 2048;
        int64_t y = 0;
        long double dy = 0;
 
        ch->LeftAxis->Automatic = true;
        ch->LeftAxis->SetMinMax(-12000,-10000);
        ch->LeftAxis->LabelStyle = talValue; // talText; // выводится время по оси У
 
        for(unsigned long int j=0;j<mSize;j++)
        {
            x = j;
            ch->Series[0]->Add((double)-11111.111,Date().CurrentTime().FormatString("hh:mm:ss:ms"),clRed);
//            ch->Series[0]->AddXY((double)x, (double)-11111.11,FloatToStr(-11111.111));
        }
        ch->BottomAxis->LabelsAngle=90;
}
 
void __fastcall TForm1::chClick(TObject *Sender)
{
    ch->LeftAxis->Automatic = true;
    ch->BottomAxis->Automatic = true;
}
Вложения
Тип файла: rar pr-18-06-18.rar (68.2 Кб, 4 просмотров)
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33374 / 21499 / 8235
Регистрация: 22.10.2011
Сообщений: 36,894
Записей в блоге: 11
18.06.2018, 12:12
Вроде нормально все рисуется. Время вертикально снизу вверх по OX, метки по OY... Чего нужно получить-то?
Миниатюры
TChart не рисуются отрицательные значения по оси OY  
0
 Аватар для Stick
4 / 4 / 1
Регистрация: 26.11.2009
Сообщений: 156
18.06.2018, 12:23  [ТС]
Хотелось бы, чтобы по ОУ точно отображалась значение точки.
И чтобы после увеличения масштаба по нажатию на график ЛКМ он восстанавливался
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33374 / 21499 / 8235
Регистрация: 22.10.2011
Сообщений: 36,894
Записей в блоге: 11
18.06.2018, 12:57
Значение точки - вот так, например:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
// ...
        ch->LeftAxis->LabelStyle = talMark;
// ...
 
// и вот такой обработчик OnGetAxisLabel чарта:
void __fastcall TForm1::chGetAxisLabel(TChartAxis *Sender,
      TChartSeries *Series, int ValueIndex, AnsiString &LabelText)
{
    if(Sender == ch->LeftAxis)
    {
    if(ValueIndex > -1 && ValueIndex < Series1->YValues->Count())
        LabelText = FloatToStr(Series1->YValues->Value[ValueIndex]);
    }
}
, вот результат:
Миниатюры
TChart не рисуются отрицательные значения по оси OY  
0
 Аватар для Stick
4 / 4 / 1
Регистрация: 26.11.2009
Сообщений: 156
18.06.2018, 14:14  [ТС]
volvo, не совсем понял. Не получается попасть на строку
C++
1
LabelText = FloatToStr(Series1->YValues->Value[ValueIndex]);
Всегда ValueIndex = -1
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33374 / 21499 / 8235
Регистрация: 22.10.2011
Сообщений: 36,894
Записей в блоге: 11
18.06.2018, 14:18
После добавления значений в серию - получится.
0
 Аватар для Stick
4 / 4 / 1
Регистрация: 26.11.2009
Сообщений: 156
19.06.2018, 05:53  [ТС]
volvo, точно! забыл поменять на talMark...
И еще момент: у меня два источника данных типа int64 и long double.
Сетка получается не одинаковой (расстояние между точками). При рисовании double можно округлить вывод до 3х точек после запятой?
Вложения
Тип файла: rar pr3.rar (71.8 Кб, 3 просмотров)
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33374 / 21499 / 8235
Регистрация: 22.10.2011
Сообщений: 36,894
Записей в блоге: 11
19.06.2018, 09:53
У меня твой код при выборе int64 вообще не отображает ничего по оси OY, а при выборе long double - всегда только одно значение. Но то, что тебе нужно - делается вот так:
C++
1
2
3
4
// OnGetAxisLabel
// ...
LabelText = FormatFloat("#.###", Series1->YValues->Value[ValueIndex]);
// ...
0
 Аватар для Stick
4 / 4 / 1
Регистрация: 26.11.2009
Сообщений: 156
19.06.2018, 13:24  [ТС]
volvo, У меня при открытии тоже ничего не рисуется(. Зато после при нажатии на график получаю картинки
Миниатюры
TChart не рисуются отрицательные значения по оси OY  
0
 Аватар для Stick
4 / 4 / 1
Регистрация: 26.11.2009
Сообщений: 156
19.06.2018, 13:42  [ТС]
Как понимаю график перерисовывается тут
C++
1
2
3
4
5
void __fastcall TForm1::chClick(TObject *Sender)
{
    ch->LeftAxis->Automatic = true;
    ch->BottomAxis->Automatic = true;
}
0
 Аватар для Stick
4 / 4 / 1
Регистрация: 26.11.2009
Сообщений: 156
19.06.2018, 13:48  [ТС]
Заменив
C++
1
ch->Series[0]->Add((long double)GetDblVal(),x);
Не влезают подписи на ОУ
Миниатюры
TChart не рисуются отрицательные значения по оси OY  
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
19.06.2018, 13:48
Помогаю со студенческими работами здесь

оси TChart'а
Доброе время суток. Проблема банальная до невозможности!. Рисую в Tchart'е график точечного процесса. Задаю мин мак по оси У: ...

Подписи оси в Tchart
Собственно проблема с подписями. Если максимальное значение = граница меньше 6, то начало оси подписывается как 1.xxxxE-xx, в остальных...

Tchart зафиксировать оси
При запуске проги tchart выглядит вот так (влож 1) (т.е декаротвая система две оси х и у) надо сделать, чтобы по кнопке Paint это не...

Подписать оси в TChart
Столкнулся с проблемой подписью осей в Tchart, собственно нашел решение использовать элемент TListChartSource, но не могу понять как...

Смещение горизонтальной оси TChart
Подскажите пожалуйста как сделать , чтобы горизонтальная ось была по центру TChart , а не внизу как обычно .


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru