Subscribe Bookmark RSS Feed

Create multiple overlay plots and link the x-axes for zooming?

Hi,

I'm working at a solar energy company and we often need to browse and inspect time-series of meteorological and electrical power data (see example plot below).

It would be useful if I could have several overlay plots (e.g. one with irradiance over time, one with temperature over time, one with electrical power over time) on one page and have the x-axes (always time in this case) linked, so if I zoom into e.g. one hour in one overlay plot, the others are automatically zoomed to the same time window.

Here you can see how typical plots look like - I would like to establish the same plot within JMP.

Thanks for any hint!

Tobias

8846_linked x-axis example_rev01.png

1 ACCEPTED SOLUTION

Accepted Solutions
Solution

Can be done in Graph Builder.  Your data needs to be "stacked", with one column for date (x axis), one column identifying the Y variable (e.g. wind velocity, ambient temperature, etc.), and one column with Y values.

Here's an example done in JSL, that starts with unstacked data, stacks it, and then plots it.

dt1 = New Table( "Unstacked", Add Rows( 5 ),

    New Column( "Date", Numeric, Continuous, Format( "m/d/y", 10 ),

        Input Format( "m/d/y" ),

        Set Values( [3502915200, 3505593600, 3508012800, 3510691200, 3513283200] ) ),

    New Column( "Wind", Numeric, Continuous, Format( "Best", 12 ),

        Set Values( [10, 20, 30, 20, 10] ) ),

    New Column( "Temperature", Numeric, Continuous, Format( "Best", 12 ),

        Set Values( [100, 20, 150, 175, 180] ) ),

    New Column( "Power", Numeric, Continuous, Format( "Best", 12 ),

        Set Values( [50, 51, 52, 53, 54] ) )

);

dt2 = Data Table( "Unstacked" ) << Stack(

    columns( :Wind, :Temperature, :Power ),

    Source Label Column( "Group" ),

    Stacked Data Column( "Y Values" ),

    Output Table( "Stacked" )

);

dt2 << Graph Builder(

    Show Control Panel( 0 ),

    Variables( X( :Date ), Y( :Y Values ), Group Y( :Group ), Color( :Group ) ),

    Elements(

        Line( X, Y, Legend( 3 ), Row order( 0 ), Summary Statistic( "Mean" ) )

    )

);

4 REPLIES
Solution

Can be done in Graph Builder.  Your data needs to be "stacked", with one column for date (x axis), one column identifying the Y variable (e.g. wind velocity, ambient temperature, etc.), and one column with Y values.

Here's an example done in JSL, that starts with unstacked data, stacks it, and then plots it.

dt1 = New Table( "Unstacked", Add Rows( 5 ),

    New Column( "Date", Numeric, Continuous, Format( "m/d/y", 10 ),

        Input Format( "m/d/y" ),

        Set Values( [3502915200, 3505593600, 3508012800, 3510691200, 3513283200] ) ),

    New Column( "Wind", Numeric, Continuous, Format( "Best", 12 ),

        Set Values( [10, 20, 30, 20, 10] ) ),

    New Column( "Temperature", Numeric, Continuous, Format( "Best", 12 ),

        Set Values( [100, 20, 150, 175, 180] ) ),

    New Column( "Power", Numeric, Continuous, Format( "Best", 12 ),

        Set Values( [50, 51, 52, 53, 54] ) )

);

dt2 = Data Table( "Unstacked" ) << Stack(

    columns( :Wind, :Temperature, :Power ),

    Source Label Column( "Group" ),

    Stacked Data Column( "Y Values" ),

    Output Table( "Stacked" )

);

dt2 << Graph Builder(

    Show Control Panel( 0 ),

    Variables( X( :Date ), Y( :Y Values ), Group Y( :Group ), Color( :Group ) ),

    Elements(

        Line( X, Y, Legend( 3 ), Row order( 0 ), Summary Statistic( "Mean" ) )

    )

);

Dan_Obermiller

Joined:

Apr 3, 2013

I hadn't thought about scripting this. Another approach does not require the stacking. I built the graph interactively with Graph Builder by just dragging the various Y columns to the Y-axis, one below the other. I then switched to the lines rather than data points. Here is the resulting script using Peter's unstacked data table:

Graph Builder(

Size( 534, 452 ),

Show Control Panel( 0 ),

Variables( X( :Date ), Y( :Wind ), Y( :Temperature ), Y( :Power ) ),

Elements( Position( 1, 1 ), Line( X, Y, Legend( 39 ) ) ),

Elements( Position( 1, 2 ), Line( X, Y, Legend( 40 ) ) ),

Elements( Position( 1, 3 ), Line( X, Y, Legend( 41 ) ) )

);

Dan Obermiller
pmroz

Super User

Joined:

Jun 23, 2011

Thanks DanO.  I figured there was a way to do it using unstacked data but couldn't find the right "drop zone"!

Thanks to both of you for showing me two ways how to get there! (I had not noticed yet that one can drag multiple columns to the y axis, one below the other).