cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
Try the Materials Informatics Toolkit, which is designed to easily handle SMILES data. This and other helpful add-ins are available in the JMP® Marketplace
Choose Language Hide Translation Bar
Dyan
Level I

Graph Builder how do i make it detect the variables and insert them in?

 

        NX = 5; //NX NY are to specify the matrix indices for Graph builder
		NY = 5;
			
		If( Is Missing(colX1[i]), NX = NX - 1 );
		If( Is Missing(colX2[i]), NX = NX - 1 );
		If( Is Missing(colX3[i]), NX = NX - 1 );
		If( Is Missing(colX4[i]), NX = NX - 1 );
		
		show(NX);
		
		If( Is Missing(colY1[i]), NY = NY - 1 );
		If( Is Missing(colY2[i]), NY = NY - 1 );
		If( Is Missing(colY3[i]), NY = NY - 1 );
		If( Is Missing(colY4[i]), NY = NY - 1 );
		
		show(NY);
		
		x_vars = {}; // make empty list for x and y variables 
		y_vars = {};
		
		X = colX[i];
		X1 = colX1[i];
		X2 = colX2[i];
		X3 = colX3[i];
		X4 = colX4[i];
		
		Y = colY[i];
		Y1 = colY1[i];
		Y2 = colY2[i];
		Y3 = colY3[i];
		Y4 = colY4[i];
		
		If( !Is Missing(colX[i]), Insert Into( x_vars, X ) ); 
		If(	!Is Missing(colX1[i]), Insert Into( x_vars, X1) );
		If(	!Is Missing(colX2[i]),Insert Into( x_vars, X2) );
		If(	!Is Missing(colX3[i]), Insert Into( x_vars, X3) );
		If(	!Is Missing(colX4[i]), Insert Into( x_vars, X4) ); 

		If( !Is Missing(colY[i]), Insert Into( y_vars, Y) ); 
		If(	!Is Missing(colY1[i]), Insert Into( y_vars, Y1) );
		If(	!Is Missing(colY2[i]), Insert Into( y_vars, Y2) );
		If(	!Is Missing(colY3[i]), Insert Into( y_vars, Y3) );
		If(	!Is Missing(colY4[i]), Insert Into( y_vars, Y4) );  
		
		show(x_vars);
		show(y_vars);

		GB = Current Data Table() << Graph Builder(
			Size( 621, 472 ),
			Variables(
				X(x_vars),
				Y(y_vars)	
			),
			// the for loops is used together with the NX and NY part from above
			For( i = 1, i <= NX, i++,
				For( j = 1, j <= NY , j++,
					If( i == 1 & j == 1,
						Elements(
							Position( i, j ),
							Points( X, Y, Legend( 67 ) ),
							Smoother( X, Y, Legend( 68 ) )
						),
						Elements(
							Position( i, j ),
							Points( X, Y, Legend( 68 + (i - 1) * 5 + (j - 2) ) ),
							Smoother( X, Y, Legend( 69 + (i - 1) * 5 + (j - 2) ) )
						)
					)
				)
			),
			
			SendToReport(
				Dispatch(
					{},
					"Graph",
					ScaleBox,
					{Label Row( {Show Major Grid( 1 ), Show Minor Grid( 1 )} )}
				)
			)
			
		);

Hi all, how can script it in such a way that it detects which of my variables is not empty and adds it in the X( ) and Y( ) of Variables shown below. 

What i have now is shown above where it will detect which is not missing and add it to a list then from that list try to add it into variables shown below how do i continue? 

 

thanks for reading 

 

            Variables(
				X(x_vars),
				Y(y_vars)	
			),

 

 

1 REPLY 1

Re: Graph Builder how do i make it detect the variables and insert them in?

Hi @Dyan ,

Is the following graphic what you want to create? If so, here is a sample script.

111424.png

x_vars = "";
y_vars = "";
		
xlist = {X, X1, X2, X3, X4} = Eval List( {colX[i], colX1[i], colX2[i], colX3[i], colX4[i]} );
ylist = {Y, Y1, Y2, Y3, Y4} = Eval List( {colY[i], colY1[i], colY2[i], colY3[i], colY4[i]} );

For( x_i = 1, x_i <= N Items( xlist ), x_i++,
	If( !Is Empty( xlist[x_i] ),
		x_vars = x_vars || "X(" || Char( Eval Expr( xlist[x_i] ) ) || "),"
	)
);

For( y_i = 1, y_i <= N Items( ylist ), y_i++,
	If( !Is Empty( ylist[y_i] ),
		y_vars = y_vars || "Y(" || Char( Eval Expr( ylist[y_i] ) ) || "),"
	)
);
		
Show( x_vars );
Show( y_vars );

Eval(
	Parse(
		Eval Insert( "\[GB = Current Data Table() << Graph Builder(
				Size( 621, 472 ),
				Variables(  ^x_vars^  ^y_vars^  ), 		
				)
	;]\" )
	)
);

The following discussion page refers to a similar question. https://community.jmp.com/t5/Discussions/JSL-Script-Graph-Builder-to-plot-all-columns-of-a-data-tabl... 

You can also learn about expressions on the page below. https://community.jmp.com/t5/JSL-Cookbook-Archived/Insert-one-expression-into-another-using-Eval-Ins... 

I hope it helps.