Turn on suggestions

Auto-suggest helps you quickly narrow down your search results by suggesting possible matches as you type.

Showing results for

- JMP User Community
- :
- Discussions
- :
- Discussions
- :
- [Script JLS] : Loop for plotting several graphs together

Topic Options

- Start Article
- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page

- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Get Direct Link
- Email to a Friend
- Report Inappropriate Content

[Script JLS] : Loop for plotting several graphs together

Jul 6, 2018 2:57 AM
(879 views)

Hello,

I'm new in JMP. It's a powerfull software !

That is why I would like to write a script that can plot several Y from different column (every n column actually) in function of one X.

I wrote it thanks to graph builder interface, but I would like to script it in a loop.

I did something like that for plotting distribution (but it is not the same scale unfortunately ...)

```
//Distributions Std Dev
New Window( "Side by Side",
H List Box(
Distribution(
Continuous Distribution( Column( :median_range_mm ))
);
for ( p = 2, p <= 64, p++,
nom = "median_range_mm " || char(p);
col = Column(nom);
Distribution(
Continuous Distribution( Column( col ), Std Error Bars( 1 ) );
/*SendToReport(
Dispatch(
{"Distributions", Column( col )},
"1",
ScaleBox,
{Min( 1450 ), Max( 1820 ), Inc( 20 ), Minor Ticks( 0 ),
Label Row Nesting( 1 )}
)
)*/
)
)
)
```

This is what I tried for my main problem, the result is just an opening window of graph builder.

I would like to plot the column [ref, ref 1 , ref 2 until ref 64] on Y axis and currentTimeMillis on X axis

```
New Window( "Ref",
H List Box(
Graph Builder(
For (r = 2 , r <= 64, r++,
name = "ref " || char(r);
col = Column(name);
Variables( X( :currentTimeMillis ), Y (Column (col), Position( 1 ) ) ),
Elements(
Points( X, Y(r) , Legend( 29 ) ),
Smoother( X , Y(r), Legend( 30 ) )
),
SendToReport(
Dispatch(
{},
"graph title",
TextEditBox,
{Set Text( strTitle )}
)
)
)
)
)
);
```

Thanks for your help.

Cheers

5 REPLIES 5

- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Get Direct Link
- Email to a Friend
- Report Inappropriate Content

Re: [Script JLS] : Loop for plotting several graphs together

Here is an example of how I would do it

```
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/semiconductor capability.jmp" );
For( i = 6, i <= 69, i++,
Column( dt, i ) << set name( "ref " || Char( i - 5 ) )
);
Column( dt, 5 ) << set name( "currentTimeMillis" );
New Window( "Ref",
hlb = H List Box(
)
);
For( r = 2, r <= 64, r++,
name = "ref " || Char( r );
Eval(
Substitute(
Expr(
outputhlb = H List Box(
Graph Builder(
Variables(
X( :currentTimeMillis ),
Y( Column( __col__ ), Position( 1 ) )
),
Elements(
Points( X, Y( r ), Legend( 29 ) ),
Smoother( X, Y( r ), Legend( 30 ) )
),
SendToReport(
Dispatch(
{},
"graph title",
TextEditBox,
{Set Text( strTitle )}
)
)
)
)
),
Expr( __col__ ), Parse( ":" || name )
)
);
hlb << append( outputhlb );
);
```

Jim

- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Get Direct Link
- Email to a Friend
- Report Inappropriate Content

Re: [Script JLS] : Loop for plotting several graphs together

Thank you for your reply Jim !

But I may have misrepresented my problem.

Indeed, I would like to have __all of my plot on the same graph__.

Also my Y column has already been set every 11 columns, and currentTimeMillis appear just once at the beginning :

```
//Set columns
For( i = 1, i <=709 , i++,
For ( j = 0, j <= 63, j++,
If ( i == 2, Column(i) << set name( "currentTimeMillis" ),i == 15 + 11*j, Column(i) << set name( "ref" ),
)
)
)
```

Finally, "__col__" has not been defined ( "col" was defined but in an other function for distribution), so I don't understand why you used it here.

Thanks again.

- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Get Direct Link
- Email to a Friend
- Report Inappropriate Content

Re: [Script JLS] : Loop for plotting several graphs together

I am a bit confused.....but I offer this code as a possible example of a solution. It appears from the last piece of code you supplied, that you are changing the names of columns in your data table, to "Ref". Since JMP will not allow you to have 2 columns of the same name, the second column you attempt to rename "Ref", actually gets named, "Ref 2". And that continues all the way through column "Ref 64". I also suggest that you recheck your code for the naming of column "currentTimeMillis". In your code, you actually rename that column(to the same name), 64 times.

Below is my new code......it uses a sample data table.......the columns called Ref - Ref 64, are all in a contiguous order, but since JMP really does not care, the code will also work for your data table, where the columns are spread across your 700+ columns

```
Names Default To Here( 1 );
// Build some sample data
dt = Open( "$SAMPLE_DATA/semiconductor capability.jmp" );
Column( dt, 6 ) << set name( "ref" );
For( i = 7, i <= 69, i++,
Column( dt, i ) << set name( "ref " || Char( i - 5 ) )
);
Column( dt, 5 ) << set name( "currentTimeMillis" );
// Build the JSL code for the Graph Builder
theExpr = "dt << Graph Builder(
Variables(
X( :currentTimeMillis ),
Y( :ref )";
For( i = 2, i <= 64, i++,
theExpr = theExpr || ",Y( :ref " || Char( i ) || ", Position( 1 ) )"
);
theExpr = theExpr || "),
Elements(
Points(
X";
For( i = 2, i <= 64, i++,
theExpr = theExpr || ",Y( " || Char( i ) || ")"
);
theExpr = theExpr || "
,Legend( 5 )
),
Smoother(
X";
For( i = 2, i <= 64, i++,
theExpr = theExpr || ",Y( " || Char( i ) || ")"
);
theExpr = theExpr || " ,
Legend( 6 )
)
)
)";
// Execute the generated code
Eval( Parse( theExpr ) );
```

Jim

- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Get Direct Link
- Email to a Friend
- Report Inappropriate Content

Re: [Script JLS] : Loop for plotting several graphs together

- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Get Direct Link
- Email to a Friend
- Report Inappropriate Content

Re: [Script JLS] : Loop for plotting several graphs together

One can easily create output objects, that can be created in advance and then displayed at user's request. Or, because of the speed of JMP, many of my applications generate specific outputs at the time of a user's request. You should also explore the Column Switcher that will allow the user to select from a list, what to columns to analyze and display.

Jim