JSL peut-il restaurer la valeur de la courbe ?Si vous avez déjà une courbe donnée, comment pouvez-vous utiliser le code pour restaurer près des données.
Définissez le nombre de données connues et les valeurs maximale et minimale des données
Il semble avoir une fonction d'intelligence artificielle.
Merci Experts !

ScriptRe : JSL peut-il restaurer la valeur de la courbe ?Et surtout, je veux comprendre à quel point cette courbe est similaire à une autre.
Le principe devrait être une comparaison entre deux ensembles de données.
JMP peut-il bien y parvenir ?
Par exemple, tracez un graphique avec JSL ci-dessous et comparez avec le graphique ci-dessus.
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 ) ) )
);

Merci Experts !
Re : JSL peut-il restaurer la valeur de la courbe ?Merci encore à Brady pour la puissance de ce script.
Je veux pousser ce script un peu plus loin
Cependant, le script est légèrement modifié pour identifier comme données :
Identifiez la courbe avec un seul pixel, une position sur l'axe X, tant que vous identifiez une valeur Y correspondante.

Re : JSL peut-il restaurer la valeur de la courbe ?Au fait, je dois mentionner que si vous ne vous souciez pas de la moyenne sur les pixels (la ligne dans le graphique ici fait plusieurs pixels d'épaisseur dans chaque colonne) et que vous recherchez simplement une approximation, le traitement (dans cet exemple particulier) peut être beaucoup plus rapide et moins encombré de tableaux de données. Comme vous le verrez, le graphique que vous obtenez est fondamentalement le même.
</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 peut-il restaurer la valeur de la courbe ?</LINGO-SUB><LINGO-BODY id="lingo-body-382962" slang="en-US" mode="NONE"><P>Ce n'est pas toujours facile, mais cela peut éventuellement être fait, selon le graphique. Voici une façon de procéder pour le graphique que vous avez fourni. Il existe peut-être des moyens plus efficaces, car je n'ai aucune expérience en traitement d'image - excuses.</P>
<P> </P>
<P>L'idée est d'obtenir les valeurs de pixel de l'image et de se concentrer sur les différences entre l'arrière-plan et le graphique. Dans ce cas, la couleur du graphique était le minimum dans n'importe quelle colonne de pixels. Dans d'autres cas, vous devrez peut-être dériver une sorte de filtre passe-bande, etc. Pour un arrière-plan multicolore, même cette approche pourrait ne pas fonctionner si la couleur du graphique était la même que l'une des couleurs de l'arrière-plan. En tout cas, essayez ceci.</P>
<P> </P>
<P>Il s'agit d'une approche grossière, mais devrait vous donner un point de départ. Nettoyer/lisser les données n'est pas si difficile à faire après coup. Je suis sûr que d'autres trouveront également de nombreuses façons d'améliorer l'approche et les performances.</P>
<P> </P>
<P>REMARQUE : Je n'ai pas redimensionné x et y. Encore une fois, ce n'est pas difficile à faire une fois que vous avez la matrice jusqu'aux données du graphique.</P>
<P> </P>
<P>J'ai joint le .png que j'ai utilisé pour que vous puissiez utiliser le même fichier que moi.</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>Acclamations,</P>
<P>brady</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>
Re : JSL peut-il restaurer la valeur de la courbe ?Je dois admettre que je ne comprends pas assez la question pour commencer à proposer une réponse. Si la courbe est un bit map painting (fichier .png), alors je ne peux pas imaginer que JMP ait le droit aussi d'essayer de la lire. Êtes-vous à la recherche d'un logiciel de numérisation et de reconnaissance optique ?
Dans quel format est la courbe ? Essayez-vous de lire la courbe rouge ou essayez-vous de lire le texte numérique au bas de l'image ?
Peut-être qu'en affirmant que JMP ne peut pas le faire, je suis sur le point d'apprendre une fonctionnalité de JMP que je ne connais pas.