Subscribe Bookmark RSS Feed

How to plot data from two tables without combining the tables

Kees_de_Vries

New Contributor

Joined:

Apr 10, 2017

Hello World,

 

We do measurements in our lab and we always end up with multiple data tables which contain measured data and filtered data. For some practical reasons we do not want to combine the tables in order to plot the measured data and filtered data. Is it possible to plot the x y data from one table and the x y data from the other table on the same axis in a "Fit y by x" (jmp graph type) like scatter plot?

 

I am looking for the same flexibility Matlab offers with the plot function.

 

Scripting or explaination of how to acchief this with the JMP gui are both appreciated.

 

 

6 REPLIES
shoffmeister

Community Trekker

Joined:

Mar 27, 2015

Kees_de_Vries

New Contributor

Joined:

Apr 10, 2017

Thank you for the reaction,

 

unfortunately this is not what I am looking for, in my measurements there is not always a relation with the filtered data. Some values are excluded and considered as outliers. But I still would like to plot them and be aware of the outliers.

txnelson

Super User

Joined:

Jun 22, 2012

Something like this might work.  The example below has 2 data tables, one with valid data and one with outliers.  Then to use the 2 together, a new, "Private" data table is created, and the chart is run from it.

Names Default To Here( 1 );

// Create the data table with the good data
New Table( "Big Class",
	Add Rows( 36 ),
	New Column( "name",
		Character,
		"Nominal",
		Set Values(
			{"KATIE", "LOUISE", "JANE", "JACLYN", "LILLIE", "TIM", "JAMES", "BARBARA", "ALICE",
			"SUSAN", "JOHN", "JOE", "MICHAEL", "DAVID", "LESLIE", "CAROL", "PATTY", "FREDERICK",
			"HENRY", "LEWIS", "EDWARD", "CHRIS", "JEFFREY", "MARY", "AMY", "ROBERT", "WILLIAM",
			"CLAY", "MARK", "DANNY", "MARTHA", "MARION", "PHILLIP", "LINDA", "KIRK", "LAWRENCE"}
		)
	),
	New Column( "age",
		Numeric,
		"Ordinal",
		Set Values(
			[12, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14,
			14, 14, 15, 15, 15, 15, 15, 15, 15, 16, 16, 16, 17, 17, 17]
		)
	),
	New Column( "sex",
		Character( 1 ),
		"Nominal",
		Set Values(
			{"F", "F", "F", "F", "F", "M", "M", "F", "F", "F", "M", "M", "M", "M", "F", "F", "F",
			"M", "M", "M", "M", "M", "M", "F", "F", "M", "M", "M", "M", "M", "F", "F", "M", "F",
			"M", "M"}
		)
	),
	New Column( "height",
		Numeric,
		"Continuous",
		Format( "Fixed Dec", 5, 0 ),
		Set Values(
			[59, 61, 55, 66, 52, 60, 61, 60, 61, 56, 65, 63, 58, 59, 65, 63, 62, 63, 65, 64, 68,
			64, 69, 62, 64, 67, 65, 66, 62, 66, 65, 60, 68, 62, 68, 70]
		)
	),
	New Column( "weight",
		Numeric,
		"Continuous",
		Format( "Fixed Dec", 5, 0 ),
		Set Values(
			[95, 123, 74, 145, 64, 84, 128, 112, 107, 67, 98, 105, 95, 79, 142, 84, 85, 93, 119,
			92, 112, 99, 113, 92, 112, 128, 111, 105, 104, 106, 112, 115, 128, 116, 134, 172]
		)
	),
	New Column( "source",
		Character,
		"Nominal",
		Set Values(
			{"Valid", "Valid", "Valid", "Valid", "Valid", "Valid", "Valid", "Valid", "Valid",
			"Valid", "Valid", "Valid", "Valid", "Valid", "Valid", "Valid", "Valid", "Valid",
			"Valid", "Valid", "Valid", "Valid", "Valid", "Valid", "Valid", "Valid", "Valid",
			"Valid", "Valid", "Valid", "Valid", "Valid", "Valid", "Valid", "Valid", "Valid"}
		)
	)
);

// Create the outlier data table
New Table( "Outliers",
	Add Rows( 4 ),
	New Column( "name",
		Character,
		"Nominal",
		Set Values( {"ROBERT", "JUDY", "ELIZABETH", "ALFRED"} )
	),
	New Column( "age",
		Numeric,
		"Ordinal",
		Format( "Fixed Dec", 5, 0 ),
		Set Values( [12, 14, 14, 14] )
	),
	New Column( "sex", Character( 1 ), "Nominal", Set Values( {"M", "F", "F", "M"} ) ),
	New Column( "height",
		Numeric,
		"Continuous",
		Format( "Fixed Dec", 5, 0 ),
		Set Values( [51, 61, 62, 64] )
	),
	New Column( "weight",
		Numeric,
		"Continuous",
		Format( "Fixed Dec", 5, 0 ),
		Set Values( [79, 81, 91, 99] )
	),
	New Column( "source",
		Character,
		"Nominal",
		Set Values( {"Outlier", "Outlier", "Outlier", "Outlier"} )
	)
);

// Display chart by creating a nondisplayed data table
p1 = Data Table( "Big Class" ) << Concatenate( Data Table( "Outliers" ), private );
p1 << color by column( :source );
p1 << Bivariate( Y( :height ), X( :weight ), Fit Line( {Line Color( {213, 72, 87} )} ) );
Jim
Kees_de_Vries

New Contributor

Joined:

Apr 10, 2017

Jim, Thanks for the proposed sollution, this only works when the two columns in both tables have the same name. Actually I am looking for a solution where this is not the case. I can hear you ask why not change the column names :) I work with a lot of datasets containing in many cases different column names per project. I which there will be a jmp plotting function in the future which makes it possible to choose multiple x and y columns from multiple datatables.

 

 

Craige_Hales

Staff

Joined:

Mar 21, 2013

You can make your own graphs with JSL like this. Selecting points in the graphs will not select rows in the tables because copies of the data are used. If you need a legend you'll have to make that too, perhaps using text(...) as shown. You'll be missing some other features provided by different platforms (splines, fits) which may make other ideas that temporarily combine the tables look a lot better. 

ab = New Table( "ab data",
    Add Rows( 4 ),
    New Column( "a", Numeric, "Continuous", Format( "Best", 12 ), Set Values( [11, 12, 15, 17, 19] ) ),
    New Column( "b", Numeric, "Continuous", Format( "Best", 12 ), Set Values( [30, 40, 20, 70, 50] ) )
);

cd = New Table( "cd data",
    Add Rows( 4 ),
    New Column( "c", Numeric, "Continuous", Format( "Best", 12 ), Set Values( [21, 22, 25, 27] ) ),
    New Column( "d", Numeric, "Continuous", Format( "Best", 12 ), Set Values( [10, 20, 30, 60] ) )
);

New Window( "Example",
    Graph Box(
        Y Scale( 0, 80 ),
        X Scale( 10, 30 ),
        FrameSize(500,200),
        Title( "ab and cd" ),
        // comma delimited parameters above, semicolon delimited statements below
        Pen Color( "red" );
        Text Color( "red" );
        Pen Size( 4 );
        Marker Size( 6 );
        Marker( ab:a[1 :: N Rows( ab )], ab:b[1 :: N Rows( ab )] );
        Line( ab:a[1 :: N Rows( ab )], ab:b[1 :: N Rows( ab )] );
        Text( {ab:a[N Rows( ab )], ab:b[N Rows( ab )]}, " ab" );
        Pen Color( "green" );
        Text Color( "green" );
        Pen Size( 2 );
        Marker Size( 3 );
        Marker( cd:c[1 :: N Rows( cd )], cd:d[1 :: N Rows( cd )] );
        Line( cd:c[1 :: N Rows( cd )], cd:d[1 :: N Rows( cd )] );
        Text( {cd:c[N Rows( cd )], cd:d[N Rows( cd )]}, " cd" );
    )
);

(There's a lot of repetition in this example; it is simpler than it looks.)

Thick red curve and thin green curve from different tablesThick red curve and thin green curve from different tables

Craige
Kees_de_Vries

New Contributor

Joined:

Apr 10, 2017

Thanks for your response Craige_Hales,

 

As you already pointed out it is not possible to use the awsome feature of making selections in the graphs and directly see the corresponding relations in other graphs. I start to believe that there is not easy solution except for renaming the columns and merge the tables in order to get the data with all the features in a single graph.

 

Hopefully there will be a easy solution in a future release of jmp :)