如果已经有给定的曲线,如何使用代码恢复接近的数据。
设置已知数据的个数,以及数据的最大值和最小值
它似乎具有一些人工智能功能。
谢谢专家!

最重要的是,我想实现这条曲线与另一条曲线的相似程度。
原则应该是两组数据之间的比较。
JMP 能很好地做到这一点吗?
例如,下面的 JSL 图表并与上面的图表进行比较。
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
dt << Sort( By( 1 ), Order( Ascending ), replacetable( 1 ) );
New Column( "A" );
Column( "A" ) << Formula( Row() );
dt << run formulas;
Column( "A" ) << deleteFormula;
p1 = Graph Builder(
Size( 528, 450 ),
Show Control Panel( 0 ),
Variables( X( :age ), Y( :A ) ),
Elements( Line( X, Y, Legend( 4 ) ) )
);

谢谢专家!
再次感谢 Brady 提供了这个脚本的强大功能。
我想让这个脚本更进一步
但是,脚本稍作修改以识别为数据:
识别只有一个像素的曲线,一个 X 轴位置,只要识别出对应的 Y 值即可。

顺便说一句,我应该提一下,如果您不关心像素的平均值(图中的线在每列中有几个像素粗)并且只是在寻找近似值,则处理(在此特定示例中)可以更快,更少的数据表混乱。 如您所见,您得到的图表基本相同。
</CODE></P>
<PRE><CODE class=" language-jsl">names default to here(1);
New Window( "Example",
pb = Picture Box( Open( "/Users/homer.simpson@jmp.com/Downloads/graphPic.png", png ) )
);
pixMat = (pb << get image) << get pixels;
pixMat = pixMat[20 :: 265, 15 :: N Col( pixMat )];
nc = N Col( pixMat );
x = (1 :: nc)`;
y = J( nc, 1, . );
For( i = 1, i <= nc, i++,
y[i] = Loc Min( pixMat[0, i] )
);
y = nrow( pixMat ) - y; //"flip" y-vals to account for screen coordinate convention.
dt = As Table( x || y, <<COLUMN names=""></COLUMN>
</CODE></P>
<P> </P></LINGO-BODY><LINGO-SUB id="lingo-sub-382962" slang="en-US" mode="NONE">Re: JSL可以恢复曲线的值吗?</LINGO-SUB><LINGO-BODY id="lingo-body-382962" slang="en-US" mode="NONE"><P>这并不总是那么容易,但可以根据图表来完成。 这是对您提供的图表执行此操作的一种方法。 那里可能有更有效的方法,因为我没有图像处理方面的背景——抱歉。</P>
<P> </P>
<P>这个想法是获取图像的像素值,并关注背景和图形之间的差异。 在这种情况下,图形颜色是任何像素列中的最小值。 在其他情况下,您可能需要派生某种带通滤波器等。 对于多色背景,如果图形的颜色与背景中的一种颜色相同,即使这种方法也可能不起作用。 无论如何,试试这个。</P>
<P> </P>
<P>这是一种粗略的方法,但应该为您提供一个起点。 事后清理/平滑数据并不难。 我相信其他人也会找到许多方法来改进方法和性能。</P>
<P> </P>
<P>注意:我没有重新调整 x 和 y。 同样,一旦您将矩阵归结为图形数据,这并不难做到。</P>
<P> </P>
<P>我已附上我使用的 .png,因此您可以使用与我相同的文件。</P>
<P> </P>
<P><SPAN class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="brady_brady_0-1620328935156.png" style="width: 999px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="brady_brady_0-1620328935156.png" style="width: 999px;"><span class="lia-inline-image-display-wrapper" image-alt="brady_brady_0-1620328935156.png" style="width: 999px;"><img src="https://us.v-cdn.net/6038925/uploads/images/32659i25847C5EFC991944/brady_brady_0-1620328935156.png" role="button" title="brady_brady_0-1620328935156.png" alt="brady_brady_0-1620328935156.png" /></span></SPAN></SPAN></P>
<P> </P>
<P> </P>
<P> </P>
<P> </P>
<P>干杯,</P>
<P>布雷迪</P>
<PRE><CODE class=" language-jsl">
Names Default To Here( 1 );
//need to save image and put the file path in the open() function.
New Window( "Example", pb = Picture Box( Open( "/Users/brady.brady@jmp.com/Downloads/graphPic.png", png ) ) );
img = pb << get image;
pixMat = img << get pixels;
pixMat = 1000*(floor(pixMat/1000)); //smooths values; use whatever factor you like
dt = astable(pixmat);
eval(substitute (
expr(dt << new column("Row", formula( _ROW_ - :row()))), //low rows for pixels are high. This is a fix for that.
expr(_ROW_),
nrow(dt)
));
dt:row << Delete Formula;
dt << move selected columns({"Row"}, to first);
dt << select where (:row() <= 20 | :row() >= 265) << Delete Rows; // top and bottom few rows of this table are not useful
stackCols = (dt << get column names)[14::ncol(dt)];
dtStack = dt << Stack(
columns( stackCols ),
Source Label Column( "Label" ),
Stacked Data Column( "Data" ),
"Non-stacked columns"n( Keep( :Row ) )
);
dtStack << select where (:data == col minimum(:data, :label)); //in this case, minimum color is the graph.
dtSub = dtStack << subset(selected rows(1), selected columns (0));
dtSub << new column("x", formula(num(substitute(:label, "Col", ""))));
summarize(dtSub, b = by(:label), yVals = mean(:Row), xVals = mean(:x));
astable(xvals || yvals, <<COLUMN names=""></COLUMN>
我不得不承认我对这个问题的理解还不够,无法开始提出答案。 如果曲线是位图绘制(.png 文件),那么我无法想象 JMP 也适合尝试读取它。 您是否正在寻找某种光学扫描和识别软件?
曲线是什么格式的? 您是要阅读红色曲线还是要阅读图片底部的数字文本?
也许通过断言 JMP 无法做到这一点,我将了解 JMP 的一些我不知道的功能。