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
A_Zaid
Level III

Plotting conditionally

Hi JMP Community!

 

I have the following piece of code as part of an add-in I made:

 

Report7 = Platform(
				dt,
				gb7 = Graph Builder(
				        Size( 632, 571 ),
					Show Control Panel( 0 ),
					Fit to Window( "Maintain Aspect Ratio" ),
					Variables( X( :Order No. ),
						Y( :S0a value, Position( 1 ) ),
						Y( :S1a value, Position( 1 ) ),
						Y( :S1b value, Position( 1 ) ),
						Y( :S1c value, Position( 1 ) ),
						Y( :S2a value, Position( 1 ) ),
						Y( :S3a value, Position( 1 ) ),
						Y( :S4b value, Position( 1 ) ) ),
					Elements(
						Line( X, Y( 1 ), Y( 2 ), Y( 3 ), Y( 4 ), Y( 5 ),
							Y( 6 ), Y( 7 ), Legend( 11 ) )
						),
				)
);

The issue is that I don't always have all the columns that I'm asking the add-in to plot on the y-axis (e.g. the data table might only have S0a - S1c rather than S0a - S4b). When this is the case, the resulting plot is just a histogram of the x-axis column (i.e. of "Order No.").

 

Is there a way of making the code plot whatever columns are available and automatically ignore the ones that aren't? I'm open to other ideas as well.

 

Thank you in advance!

 

Ahmed

1 ACCEPTED SOLUTION

Accepted Solutions
ih
Super User (Alumni) ih
Super User (Alumni)

Re: Plotting conditionally

This might be on option, you would need to populate the variables cols with the actual list you want to include:

 

Names default to here(1);

dt = Open("$Sample_data/probe.jmp");

//Variables to hold the dynamic parts of the graph builder expresssion
Expr1 = "";
Expr2 = "";

// Pick columns to include
cols = ( dt << get column names() )[random shuffle(8::397)[1::5]];

//Populate expressions
for(c=1, c<= n items(cols), c++,
	Expr1 = Expr1 || "Y( Column( \!"" || cols[c] || "\!" ), Position(1) ),";
	Expr2 = Expr2 || "Y( " || char( c ) || " ),";
);

Eval( Parse( substitute(
	//the graph builder script as a string with 'dummy variables' where the
	//expressions created earlier will go
	"gb = Graph Builder(
		Size( 838, 391 ),
		Variables(
			X( :DELL_RPPBR ),
			Expr1_
		),
		Elements( Line( X, Expr2_ Legend( 10 ) ) ),
		Local Data Filter(
			Add Filter(
				columns( :DELL_RPPBR ),
				Where( :DELL_RPPBR >= -1 & :DELL_RPPBR <= 0.483837991952896 )
			)
		)
	)",
	//replace the 'dummy variables'
	"Expr1_",
	Expr1,
	"Expr2_",
	Expr2
) ) );

View solution in original post

2 REPLIES 2
ih
Super User (Alumni) ih
Super User (Alumni)

Re: Plotting conditionally

This might be on option, you would need to populate the variables cols with the actual list you want to include:

 

Names default to here(1);

dt = Open("$Sample_data/probe.jmp");

//Variables to hold the dynamic parts of the graph builder expresssion
Expr1 = "";
Expr2 = "";

// Pick columns to include
cols = ( dt << get column names() )[random shuffle(8::397)[1::5]];

//Populate expressions
for(c=1, c<= n items(cols), c++,
	Expr1 = Expr1 || "Y( Column( \!"" || cols[c] || "\!" ), Position(1) ),";
	Expr2 = Expr2 || "Y( " || char( c ) || " ),";
);

Eval( Parse( substitute(
	//the graph builder script as a string with 'dummy variables' where the
	//expressions created earlier will go
	"gb = Graph Builder(
		Size( 838, 391 ),
		Variables(
			X( :DELL_RPPBR ),
			Expr1_
		),
		Elements( Line( X, Expr2_ Legend( 10 ) ) ),
		Local Data Filter(
			Add Filter(
				columns( :DELL_RPPBR ),
				Where( :DELL_RPPBR >= -1 & :DELL_RPPBR <= 0.483837991952896 )
			)
		)
	)",
	//replace the 'dummy variables'
	"Expr1_",
	Expr1,
	"Expr2_",
	Expr2
) ) );
A_Zaid
Level III

Re: Plotting conditionally

This did the job! Thanks @ih!