The Origin Forum
File Exchange
Try Origin for Free
The Origin Forum
Home | Profile | Register | Active Topics | Members | Search | FAQ | Send File to Tech support
Username:
Password:
Save Password
Forgot your Password? | Admin Options

 All Forums
 Origin Forum for Programming
 LabTalk Forum
 plotting multiple graphs from multiple columns
 New Topic  Reply to Topic
 Printer Friendly
Author Previous Topic Topic Next Topic Lock Topic Edit Topic Delete Topic New Topic Reply to Topic

alpy

Germany
4 Posts

Posted - 11/19/2014 :  4:01:16 PM  Show Profile  Edit Topic  Reply with Quote  View user's IP address  Delete Topic
Origin Ver. and Service Release (Select Help-->About Origin): 7.5
Operating System: win2000

hello everyone, I am quite new to the forum and also to the writing a script. I need to plot multiple x-y line graphs from different columns. Lets say I have 4 columns and I want to plot column 1 as x, 2 as y for the first graph, and 3 as x, 4 as y for the second graph.
For instance:
plotxy iy:=(1,2) plot:=200;
and
plotxy iy:=(3,4) plot:=200;
at the same time. But how do I get these two commands working together ? When I write them both, it plots the first graph, and than says Command Error! not plotting the second one.

When I use plotxy iy:=((1,2),(3,4)) plot:=200; It plots everything on the same graph. But I need separate graphs.

(1,2) and (3,4) are only example btw. There are more columns on the original problem, but I think I can manage it after I can find out how to plot these two on different graphs.

Thanks in advance!!



jasonzhao

China
262 Posts

Posted - 11/19/2014 :  10:13:06 PM  Show Profile  Edit Reply  Reply with Quote  View user's IP address  Delete Reply
Hello,

you can use for statement to plot multiple graphs.

for(int i=1;i<5;i=i+2)
{
win -a Book1; // active the data book

plotxy iy:=($(i),$(i+1)) plot:=200; // plot the XY data

}

Best regards,
Jason Zhao
OriginLab Tech Service

Edited by - jasonzhao on 11/19/2014 10:13:56 PM
Go to Top of Page

alpy

Germany
4 Posts

Posted - 11/20/2014 :  05:54:31 AM  Show Profile  Edit Reply  Reply with Quote  View user's IP address  Delete Reply
Hello, thanks for the reply. But what happens when the problem gets complicated? For example when I need to plot (2,5),(1,3),(6,4) and so on (without a pattern like (i,i+1) ).. Is there a way to define the columns only by entering the column number ?


quote:
Originally posted by jasonzhao

Hello,

you can use for statement to plot multiple graphs.

for(int i=1;i<5;i=i+2)
{
win -a Book1; // active the data book

plotxy iy:=($(i),$(i+1)) plot:=200; // plot the XY data

}

Best regards,
Jason Zhao
OriginLab Tech Service

Go to Top of Page

jasonzhao

China
262 Posts

Posted - 11/20/2014 :  10:58:50 PM  Show Profile  Edit Reply  Reply with Quote  View user's IP address  Delete Reply
Hello,

you can try to make a macro


define plot{             //define macro first

win -a Book1; // active the data book;

getn
(X) x 
(Y) y;   // use dialog for input

plotxy iy:=($(x),$(y));    // plot XY

};


//------------------------------------//

plot  //Executing the macro each time for one plot



Best regards,
Jason Zhao
OriginLab Tech Service



Edited by - jasonzhao on 11/21/2014 12:22:35 AM
Go to Top of Page

alpy

Germany
4 Posts

Posted - 11/21/2014 :  09:19:58 AM  Show Profile  Edit Reply  Reply with Quote  View user's IP address  Delete Reply
Hello, thanks again for the answer. I tried this way but is worked only for the first graph, when I tried to execute it second time, it said command error! unless I delete the first graph. So back to the point, I need 4 Graphs, to be specific from the columns (1,6) , (2,4) , (6,7) , (8,7) for every single file and I don't want to select plot, then select every time the right columns from that table, I just want to write a command, and voila, there are the 4 graphs each time I need. But I can't execute the script for multiple graphs in one script, or without deleting the graphs, right ?



quote:
Originally posted by jasonzhao

Hello,

you can try to make a macro


define plot{             //define macro first

win -a Book1; // active the data book;

getn
(X) x 
(Y) y;   // use dialog for input

plotxy iy:=($(x),$(y));    // plot XY

};


//------------------------------------//

plot  //Executing the macro each time for one plot



Best regards,
Jason Zhao
OriginLab Tech Service




Go to Top of Page

lkb0221

China
497 Posts

Posted - 11/21/2014 :  3:25:54 PM  Show Profile  Edit Reply  Reply with Quote  View user's IP address  Delete Reply
Hi, Alpy

So just activate the workbook you want to operate on, and run the following script:

// Start
string PlotIndex$ = "(1,6)|(2,4)|(6,7)|(8,7)";
string DataBook$ = %H; // Remember the data workbook's name
for (ii = 1; ii <= PlotIndex.GetNumTokens("|"); ii++) {
window -a %(DataBook$);
string CurrentPlot$ = PlotIndex.GetToken(ii,"|")$;
plotxy iy:=%(CurrentPlot$);
}
// End


If you want to change the column for plotting, simply modify the PlotIndex$ variable.

Zheng
OriginLab
Go to Top of Page

alpy

Germany
4 Posts

Posted - 11/21/2014 :  6:08:28 PM  Show Profile  Edit Reply  Reply with Quote  View user's IP address  Delete Reply
Works like a charm! Thank you very very much!!


quote:
Originally posted by lkb0221

Hi, Alpy

So just activate the workbook you want to operate on, and run the following script:

// Start
string PlotIndex$ = "(1,6)|(2,4)|(6,7)|(8,7)";
string DataBook$ = %H; // Remember the data workbook's name
for (ii = 1; ii <= PlotIndex.GetNumTokens("|"); ii++) {
window -a %(DataBook$);
string CurrentPlot$ = PlotIndex.GetToken(ii,"|")$;
plotxy iy:=%(CurrentPlot$);
}
// End


If you want to change the column for plotting, simply modify the PlotIndex$ variable.

Zheng
OriginLab

Go to Top of Page

spn

Austria
1 Posts

Posted - 11/16/2017 :  04:38:48 AM  Show Profile  Edit Reply  Reply with Quote  View user's IP address  Delete Reply
Hey,

I had the very same problem and this conversation has really helped.
Thank you all very much.

But, is there a way to give different names for each graph and apply themes separately to each of them?

Could anyone please help me with the same?

spn
Go to Top of Page

yuki_wu

896 Posts

Posted - 11/17/2017 :  02:34:57 AM  Show Profile  Edit Reply  Reply with Quote  View user's IP address  Delete Reply
Hi,

Add two variables in the example above:
string PlotIndex$ = "(1,2)|(3,4)";
string DataBook$ = %H; // Remember the data workbook's name
string GraphName$ = "Test1|Test2";
string GraphTemplate$ = "Polar|glWater3D";
for (ii = 1; ii <= PlotIndex.GetNumTokens("|"); ii++) 
{
	window -a %(DataBook$);
	string CurrentPlot$ = PlotIndex.GetToken(ii,"|")$;
	string CurrentName$ = GraphName.GetToken(ii,"|")$;
	string CurrentTemplate$ = GraphTemplate.GetToken(ii,"|")$;
	plotxy iy:=%(CurrentPlot$) ogl:=[<new template:=%(CurrentTemplate$) name:=%(CurrentName$)>]; 
}

More info about plotxy X-Function please refer to:
https://www.originlab.com/doc/X-Function/ref/plotxy

Regards,
Yuki
OriginLab
Go to Top of Page
  Previous Topic Topic Next Topic Lock Topic Edit Topic Delete Topic New Topic Reply to Topic
 New Topic  Reply to Topic
 Printer Friendly
Jump To:
The Origin Forum © 2020 Originlab Corporation Go To Top Of Page
Snitz Forums 2000