Subscribe Bookmark RSS Feed

How do I make a customised graph?

sanqub

Community Trekker

Joined:

Jan 11, 2016

Dear community,

I was looking for a histogram of a "variable" overlaid with "defects". For this I have made bins in "Variable_coded" column by using formula.

Next I have used graph builder, "Variable_coded" as X and overlaid "Output". I am also using "time" in data filter.

I have tried option "label by value". However, I want the graph builder to label Percentage against the "total within bin" on top of each bar. 

Is it also possible to have total values in background which changes dynamically as I use filter. In other words, I want to merge these two graphs.

 

Thanks

 

dt = open("$Desktop\SampleData_Bt1.jmp");
dt << New Column( "Variable_coded",
	Character,
	"Nominal",
	Formula(
		List = {"20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31", "32", "33", "34", "35",
		"36", "37", "38", "39", "40"}[Loc Sorted(
			[20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40],
			:Variable
		)]
	),
	);
dt << select where (:Output == "GOOD");
dt << hide and exclude;

dt << Graph Builder(
	Size( 1072, 922 ),
	Lock Scales( 1 ),
	Variables( X( :Variable_coded ), Overlay( :Output ) ),
	Elements(
		Bar( X, Legend( 10 ), Label( "Label by Value" ) ),
		Caption Box( X, Legend( 11 ), Summary Statistic( "N" ) )
	),
	Local Data Filter(
		Add Filter( columns( :time ), Where( :time >= 117.31 & :time <= 124.29 ) )
	),
	SendToReport(
		Dispatch(
			{},
			"Variable_coded",
			ScaleBox,
			{Min( -0.5 ), Max( 17.5 ), Inc( 1 ), Minor Ticks( 0 )}
		),
		Dispatch(
			{},
			"",
			ScaleBox,
			{Min( 0 ), Max( 500 ), Inc( 50 ), Minor Ticks( 0 )}
		),
		Dispatch(
			{},
			"400",
			ScaleBox,
			{Legend Model(
				10,
				Properties(
					2,
					{Fill Color( 57 ), gradient(
						{Scale Values( [0 1] ), Width( 9 ), N Labels( 6 )}
					)}
				)
			)}
		)
	)
);

dt<<Graph Builder(
	Size( 534, 463 ),
	Show Control Panel( 0 ),
	Lock Scales( 1 ),
	Variables( X( :Variable_coded ) ),
	Elements( Bar( X, Legend( 7 ) ) ),
	Local Data Filter(
		Add Filter( columns( :time ), Where( :time >= 117.31 & :time <= 124.29 ) )
	),
	SendToReport(
		Dispatch(
			{},
			"Variable_coded",
			ScaleBox,
			{Min( -0.5 ), Max( 17.5 ), Inc( 1 ), Minor Ticks( 0 )}
		),
		Dispatch(
			{},
			"",
			ScaleBox,
			{Min( 0 ), Max(500 ), Inc( 50 ), Minor Ticks( 1 )}
		),
		Dispatch(
			{},
			"400",
			ScaleBox,
			{Legend Model(
				7,
				Properties(
					0,
					{Fill Color( 32 ), gradient(
						{Scale Values( [0 1] ), Width( 9 ), N Labels( 6 )}
					)}
				)
			)}
		)
	)
)

 

 

1 REPLY
Byron_JMP

Staff

Joined:

Apr 26, 2012

so, first of all, cool data set thanks for posting it.

 

For the overlay histogram graph like this:

Screen Shot 2017-09-06 at 4.38.35 PM.png

I put the variable on the X axis and put the output in the overlay role. Then selected the histogram graph element.

Graph Builder(
	Show Control Panel( 0 ),
	Variables( X( :Variable ), Overlay( :Output ) ),
	Elements( Histogram( X, Legend( 6 ) ) )
)

The rest of your question is where I think things get harder.

I used an add-in called Inveractive Binnin v2. and divided the data into pentiles, 10 groups with roughly the same number of rows.

  The add-in lets me save the bins to the data table.

Then I used Analyze/Tabulate to make this table

Screen Shot 2017-09-06 at 4.54.19 PM.png

Tabulate(
	Show Control Panel( 0 ),
	Add Table(
		Column Table( Grouping Columns( :Output ), Statistics( Row % ) ),
		Row Table( Grouping Columns( :Variable Groups ) )
	)
)
//:Variable Groups is the column generated from the interactive binning add-in

I made the tabulate table into a data table and stacked the defect types.

So now I have a table with a column for the variable groups, a column for the percent of the variable group that is each type of defect, and a column with the defect or good label. (three columns).

This lets me construct this graph.

Screen Shot 2017-09-06 at 4.59.33 PM.png

Graph Builder(
	Size( 966, 489 ),
	Show Control Panel( 0 ),
	Variables( X( :Variable Groups ), Y( :Data ), Overlay( :Label ) ),
	Elements(
		Bar( X, Y, Legend( 5 ), Bar Style( "Stacked" ), Label( "Label by Value" ) )
	)
)

I'm not quite sure if this is where you were going but its a little closer.  Maybe?

 

 

 

 

x