Вверх ↑
Этот топик читают: Гость
Ответов: 19
Рейтинг: 0
#1: 2024-04-18 18:29:08 ЛС | профиль | цитата
Подскажите, пожалуйста, как на точечном графике отобразить не все точки в серии, а например, только каждую вторую (пятую и т.д.)? Исходные данные — имеется файл со строками чисел 25.0 26.3 30.3 и т.д. Он считывается через FileStream, загружается в ListBox, перебирается ArrayEnum и воспроизводится на точечном графике PlotPoints. Хотелось бы выводить точки не так часто, а например, каждую вторую или пятую точку с сохранением масштаба по осям Х и Y
карма: 0

0
Ответов: 793
Рейтинг: 168
#2: 2024-04-18 19:01:59 ЛС | профиль | цитата
RomanRoman писал(а):
Хотелось бы выводить точки не так часто, а например, каждую вторую или пятую точку с сохранением

Красный график – все точки,
Зелёный – каждая 5-точка,
Синий – каждая 25 точка.
Add(MainForm,5423394,210,196)
{
Caption="Linear graph"
link(onCreate,10143007:doFor,[])
}
Add(Plotter,11338811,476,147)
{
Left=5
Width=350
Height=200
Align=5
Name="plotter"
}
Add(For,10143007,266,210)
{
End=1000
link(onEvent,8280411:doEvent1,[])
}
Add(PlotPoints,16221510,476,210)
{
Grapher="plotter"
Step=1
}
Add(Random,9575533,364,210)
{
Min=-10
Max=10
link(onRandom,3117829:doCalc,[])
}
Add(MathParse,3117829,420,210)
{
MathStr="%1 + %0"
link(onResult,16221510:doAdd,[])
}
Add(PlotPoints,5149791,476,266)
{
Grapher="plotter"
Color=65280
Step=5
}
Add(Hub,8280411,315,210)
{
OutCount=3
link(onEvent1,9575533:doRandom,[])
link(onEvent2,2586079:doTick,[(354,223)(354,272)])
link(onEvent3,13393078:doTick,[(347,230)(347,328)])
}
Add(Math,13043899,420,266)
{
OpType=1
Op2=100
ResultType=0
link(onResult,5149791:doAdd,[])
link(Op1,3117829:Result,[])
}
Add(GE_GameTick,2586079,364,266)
{
Count=5
link(onTick,13043899:doOperation,[])
}
Add(PlotPoints,1419494,476,322)
{
Grapher="plotter"
Color=16711680
Step=25
}
Add(Math,8933034,420,322)
{
OpType=1
Op2=100
ResultType=0
link(onResult,1419494:doAdd,[])
link(Op1,13043899:Result,[])
}
Add(GE_GameTick,13393078,364,322)
{
Count=25
link(onTick,8933034:doOperation,[])
}



Редактировалось 2 раз(а), последний 2024-04-18 21:23:28
карма: 16

0
Ответов: 19
Рейтинг: 0
#3: 2024-04-18 22:29:56 ЛС | профиль | цитата
Спасибо за идею, но… Я упростил задачу (см. проект ниже) и оставил только 2 графика, именно такие, как мне надо — подсветить каждую пятую точку на графике. Результат получается правильным при линейном графике. Но при произвольных числах в файле (нелинейный график) подсветка получается сдвинутой по вертикали на разную величину. Как устранить?
Add(MainForm,5423394,266,238)
{
Caption="Linear graph"
link(onCreate,10143007:doFor,[])
}
Add(Plotter,11338811,469,203)
{
Left=5
Width=350
Height=200
Align=5
Name="plotter"
GridY=9
MaxH=100
MaxW=100
}
Add(For,10143007,329,252)
{
Start=1
End=100
link(onEvent,2620983:doValue,[])
}
Add(PlotPoints,16221510,469,252)
{
Grapher="plotter"
Size=3
Step=1
Shape=2
}
Add(PlotPoints,5149791,469,322)
{
Grapher="plotter"
Color=0
Size=4
Step=5
Shape=1
}
Add(Hub,8280411,427,252)
{
link(onEvent1,16221510:doAdd,[])
link(onEvent2,2586079:doTick,[(453,265)(453,297)(317,297)(317,328)])
}
Add(Math,13043899,378,322)
{
OpType=1
Op2=4
link(onResult,5149791:doAdd,[])
link(Op1,2620983:Value,[])
}
Add(GE_GameTick,2586079,329,322)
{
Count=5
link(onTick,13043899:doOperation,[])
}
Add(Memory,2620983,378,252)
{
@Color=16777130
link(onData,8280411:doEvent1,[])
}


карма: 0

0
Ответов: 8926
Рейтинг: 823
#4: 2024-04-18 23:00:45 ЛС | профиль | цитата
RomanRoman, установите в графиках свойство "Step" в "0" и подайте на точки "X" одинаковую развертку от цикла.
карма: 19

0
Ответов: 793
Рейтинг: 168
#5: 2024-04-18 23:02:57 ЛС | профиль | цитата
RomanRoman писал(а):
Но при произвольных числах в файле (нелинейный график) подсветка получается сдвинутой по вертикали на разную величину. Как устранить?

Заменил на линейный для наглядности.
Add(MainForm,5423394,231,161)
{
Caption="Linear graph"
link(onCreate,10143007:doFor,[])
}
Add(Plotter,11338811,511,112)
{
Left=5
Width=350
Height=200
Align=5
Name="plotter"
}
Add(For,10143007,287,175)
{
End=100
link(onEvent,8280411:doEvent1,[])
}
Add(PlotPoints,16221510,567,175)
{
Grapher="plotter"
Step=1
}
Add(Random,9575533,392,175)
{
Min=-2
Max=2
link(onRandom,3117829:doCalc,[])
}
Add(MathParse,3117829,448,175)
{
MathStr="%1 + %0"
link(onResult,6267160:doAdd,[])
}
Add(PlotPoints,5149791,448,231)
{
Grapher="plotter"
Color=0
Size=4
Shape=2
link(ValueY,3117829:Result,[])
link(ValueX,10143007:Position,[(461,222)(293,222)])
}
Add(Hub,8280411,336,175)
{
link(onEvent1,9575533:doRandom,[])
link(onEvent2,2586079:doTick,[(368,188)(368,237)])
}
Add(GE_GameTick,2586079,392,231)
{
Count=5
link(onTick,5149791:doAdd,[])
}
Add(PlotLines,6267160,511,175)
{
Grapher="plotter"
Step=1
}


Редактировалось 2 раз(а), последний 2024-04-18 23:06:46
карма: 16

0
Ответов: 19
Рейтинг: 0
#6: 2024-04-19 11:30:54 ЛС | профиль | цитата
ОК, на статическом графике всё работает нормально, спасибо за помощь. Но мне пришлось у себя заменить счётчик GameTick на расширенный счётчик CounterEx, поскольку в последнем имеется точка обнуления счёта. Без этого загрузка на график данных из разных файлов приводила к смещению подсвечиваемых точек по оси Х. В прилагаемом проекте я добавил кнопку, которая имитирует загрузку нового файла.
Add(MainForm,5423394,245,287)
{
Caption="Linear graph"
}
Add(Plotter,11338811,518,252)
{
Left=5
Width=350
Height=200
Align=5
Name="plotter"
}
Add(For,10143007,308,301)
{
End=97
link(onEvent,8280411:doEvent1,[])
}
Add(Random,9575533,399,301)
{
Min=-2
Max=2
link(onRandom,3117829:doCalc,[])
}
Add(MathParse,3117829,455,301)
{
MathStr="%1 + %0"
link(onResult,6267160:doAdd,[])
}
Add(PlotPoints,5149791,455,357)
{
Grapher="plotter"
Color=0
Size=4
Shape=2
link(ValueY,3117829:Result,[])
link(ValueX,10143007:Position,[(468,345)(314,345)])
}
Add(Hub,8280411,357,301)
{
link(onEvent1,9575533:doRandom,[])
link(onEvent2,11928105:doNext,[(385,314)(385,356)])
}
Add(PlotLines,6267160,518,301)
{
Grapher="plotter"
Step=1
}
Add(Button,13087410,245,392)
{
Left=50
Top=20
link(onClick,5740058:doEvent1,[])
}
Add(Hub,5740058,294,392)
{
OutCount=4
link(onEvent1,6267160:doClear,[(505,398)(505,314)])
link(onEvent2,5149791:doClear,[(440,405)(440,370)])
link(onEvent3,11928105:doReset,[(384,412)(384,363)])
link(onEvent4,10143007:doFor,[(320,419)(320,363)(296,363)(296,307)])
}
Add(CounterEx,11928105,399,350)
{
Max=4
Point(doReset)
Point(doValue)
Point(onThroughMax)
link(onThroughMax,5149791:doAdd,[])
}


карма: 0

0
Ответов: 793
Рейтинг: 168
#7: 2024-04-19 22:04:58 ЛС | профиль | цитата
RomanRoman писал(а):
через FileStream, загружается в ListBox, перебирается ArrayEnum

Если будешь использовать ListBox то и счётчик использовать необязательно.

Add(Label,13803514,273,35)
{
Left=270
Top=35
Height=30
Align=2
Caption=""
AutoSize=1
}
Add(MainForm,16184661,105,105)
{
Left=20
Top=105
Width=501
Height=412
Caption="Проверка графика"
link(onCreate,11209926:doWork2,[])
}
Add(For,10143007,182,119)
{
End=100
link(onEvent,9575533:doRandom,[])
link(onStop,2814174:doEnum,[(228,132)(228,202)])
}
Add(Random,9575533,238,119)
{
Min=-2
Max=2
link(onRandom,3117829:doCalc,[])
}
Add(MathParse,3117829,301,119)
{
MathStr="%1 + %0"
Point(doClear)
link(onResult,10481824:doAdd,[])
}
Add(StrList,10481824,364,119)
{
}
Add(Plotter,11338811,427,119)
{
Width=485
Height=373
Align=5
Name="plotter"
}
Add(PlotPoints,5149791,595,252)
{
Grapher="plotter"
Color=0
Size=4
Shape=2
link(ValueX,9093669:Position,[(608,243)(573,243)(573,292)(482,292)])
}
Add(PlotLines,6267160,434,196)
{
Grapher="plotter"
Step=1
}
Add(ArrayEnum,2814174,378,196)
{
link(onItem,6267160:doAdd,[])
link(onEndEnum,9093669:doFor,[(417,209)(417,258)])
link(Array,845701:Var2,[])
}
Add(ArrayRW,14414217,525,252)
{
link(onRead,5149791:doAdd,[])
link(Array,845701:Var3,[(531,173)])
}
Add(For,9093669,476,252)
{
Step=5
link(onEvent,14414217:doRead,[])
link(End,10481824:Count,[(489,180)(377,180)])
}
Add(GetDataEx,845701,378,168)
{
link(Data,10481824:Array,[])
}
Add(Button,2313736,84,175)
{
Left=25
Top=10
link(onClick,930204:doEvent1,[])
}
Add(Hub,930204,140,175)
{
OutCount=5
link(onEvent1,3117829:doClear,[(277,181)(277,132)])
link(onEvent2,10481824:doClear,[(340,188)(340,132)])
link(onEvent3,6267160:doClear,[(424,195)(424,209)])
link(onEvent4,5149791:doClear,[(221,202)(221,237)(564,237)(564,265)])
link(onEvent5,11209926:doWork3,[(165,209)])
}
Add(HubEx,11209926,161,119)
{
link(onEvent,10143007:doFor,[])
}

карма: 16

0
Ответов: 793
Рейтинг: 168
#8: 2024-04-21 09:38:16 ЛС | профиль | цитата
Можно добавить подписи к этим точкам.

Add(MainForm,16184661,133,126)
{
Left=20
Top=105
Width=974
Height=412
Caption="Plot"
Point(onClose)
link(onCreate,10143007:doFor,[])
}
Add(Plotter,2147361,595,189)
{
Width=958
Height=373
Align=5
Name="plotter"
}
Add(PlotLines,1121104,476,140)
{
Grapher="plotter"
Step=1
Name="stream"
Point(ValuesY)
}
Add(For,10143007,189,140)
{
End=100
link(onEvent,9575533:doRandom,[])
link(onStop,16161378:doEvent1,[(235,153)(235,202)])
}
Add(Random,9575533,245,140)
{
Min=-2
Max=5
link(onRandom,3117829:doCalc,[])
}
Add(MathParse,3117829,301,140)
{
MathStr="%1 + %0"
link(onResult,1121104:doAdd,[])
}
Add(PlotPoints,5149791,539,196)
{
Grapher="plotter"
Color=0
Size=4
Name="mr"
Shape=2
Point(ValuesY)
link(ValueX,9726904:Position,[(552,187)(531,187)(531,243)(419,243)])
}
Add(PlotSeriesMarker,9665008,483,315)
{
Grapher="plotter"
FrameStyle=5
BgStyle=1
TextList=#1:4|1:3|1:6|1:7|1:2|1:9|1:5|1:2|1:2|1:8|1:7|1:5|1:3|
Series="mr"
link(QueryText,10349778:GetData,[])
}
Add(EventFromData,10349778,483,266)
{
link(onEvent,5068275:doRead,[])
}
Add(ArrayRW,5068275,539,266)
{
link(onRead,4254791:doString,[])
link(Array,5149791:ValuesY,[])
}
Add(FormatStr,4254791,588,266)
{
DataCount=1
Mask="%1 mV"
link(onFString,10349778:doData,[(627,272)(627,258)(473,258)(473,272)])
}
Add(Hub,16161378,371,196)
{
link(onEvent1,9726904:doFor,[])
link(onEvent2,9665008:doSetText,[(396,209)(396,321)])
}
Add(For,9726904,413,196)
{
Step=5
link(onEvent,11823644:doRead,[])
link(End,11823644:Count,[(426,187)(454,187)(454,236)(489,236)])
}
Add(ArrayRW,11823644,476,196)
{
Point(Count)
link(onRead,5149791:doAdd,[])
link(Array,1121104:ValuesY,[])
}

карма: 16

0
8
Сообщение
...
Прикрепленные файлы
(файлы не залиты)