How can I use JSL to create an "Overlay Plot" with data series?<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Hi all,
I would like to create an overlay plot with multiple data series. I see how I can copy the script and paste it into my code, but what if I don't know in advance how many columns I will have? Also, what can I do about using different markers as well?
Here is a copy of my script. This is one of my smaller files, so naturally I would't want to have to type in all those lines! Thanks in advance.
Overlay Plot(
X( :Drain_Voltage ),
Y(
:Y_17,
:Y_18,
:Y_19,
:Y_20,
:Y_21,
:Y_22,
:Y_23,
:Y_24,
:Y_25,
:Y_26,
:Y_27,
:Y_28,
:Y_29,
:Y_30,
:Y_31,
:Y_32,
:Y_33,
:Y_34,
:Y_35,
:Y_36,
:Y_37,
:Y_38,
:Y_39
),
Overlay Axis << {{Min( 0.01 ), Max( 100 ), Inc( 1 ), Minor Ticks( 1 )}},
:Y_17( Overlay Marker( 8 ) ),
:Y_18( Overlay Marker( 1 ) ),
:Y_20( Overlay Marker( 2 ) ),
:Y_21( Overlay Marker( 5 ) ),
:Y_22( Overlay Marker( 6 ) ),
:Y_23( Overlay Marker( 17 ) ),
:Y_24( Overlay Marker( 7 ) ),
:Y_25( Overlay Marker( 11 ) ),
:Y_26( Overlay Marker( 3 ) ),
:Y_27( Overlay Marker( 18 ) ),
:Y_28( Overlay Marker( 19 ) ),
:Y_29( Overlay Marker( 24 ) ),
:Y_30( Overlay Marker( 25 ) ),
:Y_31( Overlay Marker( 26 ) ),
:Y_32( Overlay Marker( 27 ) ),
:Y_33( Overlay Marker( 28 ) ),
:Y_34( Overlay Marker( 29 ) ),
:Y_35( Overlay Marker( 30 ) ),
:Y_36( Overlay Marker( 31 ) ),
:Y_37( Overlay Marker( 9 ) ),
:Y_38( Overlay Marker( 10 ) ),
:Y_39( Overlay Marker( 8 ) ),
SendToReport(
Dispatch(
{},
"102",
ScaleBox,
{Min( 0.01 ), Max( 100 ), Inc( 1 ), Minor Ticks( 1 )}
),
Dispatch( {}, "", AxisBox, {Add Axis Label( "Idleak (uA)" )} ),
Dispatch( {}, "Y", TextEditBox, {Set Text( "Idleak (uA)" )} ),
Dispatch( {}, "Overlay Plot Graph", FrameBox, {Frame Size( 740, 585 )} )
)
)
Re: How can I use JSL to create an "Overlay Plot" with data series?Remember 'Help > Scripting Index' is your friend here.
The example given is:
Names Default To Here( 1 );
ex = {11, 22, 33, 44, 55};
Remove From( ex, 3, 2 );
ex;
Re: How can I use JSL to create an "Overlay Plot" with data series?Hi again,
I have a syntax question. How can I remove multiple columns from a list?
I tried this Remove From(y_cols, 1::57), but it is not working.
Thanks!
Re: How can I use JSL to create an "Overlay Plot" with data series?Thank you, this makes a lot of sense actually. I like the N Items function, too. I think that can come in handy for sure.
Re: How can I use JSL to create an "Overlay Plot" with data series?I see. If you use the quick way to get a list of all numeric columns as in my second example, the first column must be removed.
An alternative is to build the list in a For-loop and include only the columns you need.
To remove the first item from a list:
Remove From(y_cols, 1);
If the x column is always the first but its name may change it can be useful to keep it in the list as in the example below. Note how I use indices to specify the columns that go into the X and Y roles, respectively.
dt = Open("$SAMPLE_DATA\Big Class.jmp");
pf = [8, 26, 2, 5, 6, 17, 7, 11, 3, 18, 19, 24, 25]; //preferred marker order
cols = dt << get column names(string, numeric); // List of column names; x first
n = N Items(cols);
// Create Overlay Plot
op = dt << Overlay Plot(X(cols[1]), Y(cols[2 :: n]));
// Set markers
For(i = 2, i <= n, i++,
Eval(Parse("op<<:" || cols[i] || "(Overlay Marker(" || Char(pf[i]) || "))"))
);
Re: How can I use JSL to create an "Overlay Plot" with data series?My first column in my table contains my x-values. I just don't want to include it as a y-column in the code.
Thanks
Re: How can I use JSL to create an "Overlay Plot" with data series?What do you mean? The X-column? Or the first column of the table?
Re: How can I use JSL to create an "Overlay Plot" with data series?Oh one more thing, what should I do if I don't want to include the first column?
Re: How can I use JSL to create an "Overlay Plot" with data series?Thank you very much! This is working well.
Re: How can I use JSL to create an "Overlay Plot" with data series?Forgot about the markers. See below for an example where the Overlay Marker command is build as a string before parsed and evaluated. May exist a simpler approach.
dt = Open("$SAMPLE_DATA\Big Class.jmp");
pf = [8, 26, 2, 5, 6, 17, 7, 11, 3, 18, 19, 24, 25]; //preferred marker order
y_cols = dt<<get column names(string, numeric); // List of y column names
// Create Overlay Plot
op = dt << Overlay Plot(X(:age), Y(Eval(y_cols)));
// Set markers
For(i = 1, i <= N Items(y_cols), i++,
Eval(Parse("op<<:" || y_cols[i] || "(Overlay Marker(" || Char(pf[i]) || "))"))
);
Re: How can I use JSL to create an "Overlay Plot" with data series?A column list can be used for setting Y columns dynamically:
dt = Open("$SAMPLE_DATA\Big Class.jmp");
y_cols = {:height, :weight};
dt << Overlay Plot(X(:age), Y(Eval(y_cols)));