cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
The Discovery Summit 2025 Call for Content is open! Submit an abstract today to present at our premier analytics conference.
Get the free JMP Student Edition for qualified students and instructors at degree granting institutions.
Choose Language Hide Translation Bar
View Original Published Thread

Plotting conditionally

A_Zaid
Level III

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!