cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
Check out the JMP® Marketplace featured Capability Explorer add-in
Choose Language Hide Translation Bar
ankitgssingh
Level III

Creating multiple varcharts for a given list of columns with different legends for each var chart using a newly created legend column everytime.

I want to create journal of varcharts for a list of columns in a dataset with different legends. a legend column is mentioned which would change in reality for each loop. everything works expect the new column formula does not work.

 

In this example, i have used a static legend value of "ABC" but this would change for every loop in reality. the issue is the new formula column does not evaluate the column name

 

dt = current data table();

mycolumnList = {"species","subject","season"};


For( i = 1, i <= N Items(mycolumnList), i++, 
	Try(dt << delete column("LegendCol"));

	legend = "ABC";

	Try( dt << New Column( "LegendCol", Formula( If(Column(mycolumnList[i])[Row()] == legend, "first", "rest" ) ) ) );


	myvarChart = vlb << append(
	dt << Variability Chart(
		Y( :miles ),
		X( eval(mycolumnList[i]) ),
		Analysis Type( "Choose best analysis (EMS REML Bayesian)" ),
		Connect Cell Means( 1 ),
		Variability Summary Report( 1 ),
		Std Dev Chart( 0 ),
		Points Jittered( 1 ),
		Show Box Plots( 1 ),
		Name( "Show Gauge R&R Specifications Dialog" )(0),
		Automatic Recalc( 1 ),
		SendToReport(
			Dispatch(
				{"Variability ChartD"},
				"Variability Chart",
				FrameBox,
				{Row Legend(
					Name( "LegendCol" ),
					Color( 1 ),
					Color Theme( "JMP Default" ),
					Marker( 1 ),
					Marker Theme( "Solid" ),
					Continuous Scale( 0 ),
					Reverse Scale( 0 ),
					Excluded Rows( 0 )
				)}
			)
		)
	));	
);

 

 

3 REPLIES 3
txnelson
Super User

Re: Creating multiple varcharts for a given list of columns with different legends for each var chart using a newly created legend column everytime.

I have reworked you script a bit.  I am not sure it gets you the total solution.  However, it seems to work on your sample data.

Names Default To Here( 1 );
// I want to create journal of varcharts for a list of columns in a dataset 
// with different legends. a legend column is mentioned which would change in 
// reality for each loop. everything works expect the new column formula does not work.  
//In this example, i have used a static legend value of "ABC" but this would change 
// for every loop in reality. the issue is the new formula column does not evaluate 
// the column name dt = current data table();

nw = New Window( "test", vlb = V List Box() );

dt = Current Data Table();
mycolumnList = {"species", "subject", "season"};


For( i = 1, i <= N Items( mycolumnList ), i++,
	Try( dt << delete column( "LegendCol" ) );
	
	legend = "ABC";
	
	Eval(
		Substitute(
				Expr(
					Try(
						dt << New Column( "LegendCol", Formula( If( Char( As Column( _mycolumnList_ ) ) == _legend_, "first", "rest" ) ) )
					)
				),
			Expr( _mycolumnList_ ), mycolumnlist[i],
			Expr( _legend_ ), legend
		)
	);

	myvarChart = vlb << append(
		dt << Variability Chart(
			Y( :miles ),
			X( Eval( mycolumnList[i] ) ),
			Analysis Type( "Choose best analysis (EMS REML Bayesian)" ),
			Connect Cell Means( 1 ),
			Variability Summary Report( 1 ),
			Std Dev Chart( 0 ),
			Points Jittered( 1 ),
			Show Box Plots( 1 ),
			Name( "Show Gauge R&R Specifications Dialog" )(0),
			Automatic Recalc( 1 ),
			SendToReport(
				Dispatch(
					{"Variability Gauge Analysis for miles", "Variability Chart for miles"},
					"Variability Chart",
					FrameBox,
					{Row Legend(
						LegendCol,
						Color( 1 ),
						Color Theme( "JMP Default"(1) ),
						Marker( 0 ),
						Marker Theme( "" ),
						Continuous Scale( 0 ),
						Reverse Scale( 0 ),
						Excluded Rows( 0 )
					)}
				)
			)
		)
	);
);
Jim
ankitgssingh
Level III

Re: Creating multiple varcharts for a given list of columns with different legends for each var chart using a newly created legend column everytime.

Thanks Jim, but this is still having one small issue. Somehow all plots are getting the same legend. 

 

For example, something like this. the legend changes everytime in the loop. however, the legends are not being picked up in the var charts. i always get the final legend column legends in all plots

nw = New Window( "test", vlb = V List Box() );

dt = Current Data Table();
mycolumnList = {"species", "subject", "season"};
mylegendList = Associative Array({"species","subject","season"},{"FOX","2","summer"});

For( i = 1, i <= N Items( mycolumnList ), i++,
	Try( dt << delete column( "LegendCol" ) );
	
	//legend = "ABC";
	legend = mylegendList[mycolumnList[i]];
	
	Eval(
		Substitute(
				Expr(
					Try(
						dt << New Column( "LegendCol", Formula( If( Char( As Column( _mycolumnList_ ) ) == _legend_, "first", "rest" ) ) )
					)
				),
			Expr( _mycolumnList_ ), mycolumnlist[i],
			Expr( _legend_ ), legend
		)
	);

	myvarChart = vlb << append(
		dt << Variability Chart(
			Y( :miles ),
			X( Eval( mycolumnList[i] ) ),
			Analysis Type( "Choose best analysis (EMS REML Bayesian)" ),
			Connect Cell Means( 1 ),
			Variability Summary Report( 1 ),
			Std Dev Chart( 0 ),
			Points Jittered( 1 ),
			Show Box Plots( 1 ),
			Name( "Show Gauge R&R Specifications Dialog" )(0),
			Automatic Recalc( 1 ),
			SendToReport(
				Dispatch(
					{"Variability Gauge Analysis for miles", "Variability Chart for miles"},
					"Variability Chart",
					FrameBox,
					{Row Legend(
						LegendCol,
						Color( 1 ),
						Color Theme( "JMP Default"(1) ),
						Marker( 0 ),
						Marker Theme( "" ),
						Continuous Scale( 0 ),
						Reverse Scale( 0 ),
						Excluded Rows( 0 )
					)}
				)
			))));

 

 

txnelson
Super User

Re: Creating multiple varcharts for a given list of columns with different legends for each var chart using a newly created legend column everytime.

To do what you are doing I believe you are going to have to create a separate Legends column for each chart

Names Default To Here( 1 );
nw = New Window( "test", vlb = V List Box() );

dt = Current Data Table();
mycolumnList = {"species", "subject", "season"};
mylegendList = Associative Array( {"species", "subject", "season"}, {"FOX", "2", "summer"} );

For( i = 1, i <= N Items( mycolumnList ), i++,
	Try( dt << delete column( "LegendCol" || Char( i ) ) );
	
	//legend = "ABC";
	legend = mylegendList[mycolumnList[i]];
	
	Eval(
		Substitute(
				Expr(
					Try(
						dt << New Column( "LegendCol" || Char( i ),
							Formula( If( Char( As Column( _mycolumnList_ ) ) == _legend_, "first", "rest" ) )
						)
					)
				),
			Expr( _mycolumnList_ ), mycolumnlist[i],
			Expr( _legend_ ), legend
		)
	);
	Eval(
		Substitute(
				Expr(
					myvarChart = vlb << append(
						dt << Variability Chart(
							Y( :miles ),
							X( Eval( mycolumnList[i] ) ),
							Analysis Type( "Choose best analysis (EMS REML Bayesian)" ),
							Connect Cell Means( 1 ),
							Variability Summary Report( 1 ),
							Std Dev Chart( 0 ),
							Points Jittered( 1 ),
							Show Box Plots( 1 ),
							Name( "Show Gauge R&R Specifications Dialog" )(0),
							Automatic Recalc( 1 ),
							SendToReport(
								Dispatch(
									{"Variability Gauge Analysis for miles", "Variability Chart for miles"},
									"Variability Chart",
									FrameBox,
									{Row Legend(
										_LegendCol_,
										Color( 1 ),
										Color Theme( "JMP Default"(1) ),
										Marker( 0 ),
										Marker Theme( "" ),
										Continuous Scale( 0 ),
										Reverse Scale( 0 ),
										Excluded Rows( 0 )
									)}
								)
							)
						)
					)
				),
			Expr( _legendcol_ ), Parse( "LegendCol" || Char( i ) )
		)
	);
);
Jim