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
 All Forums
 Origin Forum for Programming
 Forum for Origin C
 merging number of different plots in different lay

Note: You must be registered in order to post a reply.
To register, click here. Registration is FREE!

Screensize:
UserName:
Password:
Anti-Spam Code:
Format Mode:
Format: BoldItalicizedUnderlineStrikethrough Align LeftCenteredAlign Right Horizontal Rule Insert HyperlinkUpload FileInsert Image Insert CodeInsert QuoteInsert List
   
Message:

* HTML is OFF
* Forum Code is ON
Smilies
Smile [:)] Big Smile [:D] Cool [8D] Blush [:I]
Tongue [:P] Evil [):] Wink [;)] Clown [:o)]
Black Eye [B)] Eight Ball [8] Frown [:(] Shy [8)]
Shocked [:0] Angry [:(!] Dead [xx(] Sleepy [|)]
Kisses [:X] Approve [^] Disapprove [V] Question [?]

 
Check here to subscribe to this topic.
   

T O P I C    R E V I E W
olsy Posted - 10/29/2014 : 07:55:28 AM
Origin Ver. and Service Release (Select Help-->About Origin): Origin Pro 8.5
Operating System: Win7

Hi!
I can not solve one problem:
I would like to merge different number of plots in one layer.
For example, I have 66 different graphs.
I want to merge 1st, 7th, 13th and so on in one graph.
The same with 2nd, 8th and so on...
3rd, 9th....
...
6th, 12th ...

I create 6 layers. When I try to merge my plots, as the results only 1st and 7th are merged.

/Collects All Worksheets from the current Workbook with names beginning with "PlotParam"

WorksheetPage wpSource=Project.Pages(-1);
if(wpSource.IsValid()==true)
{
WorksheetPage WPtarget;
string strName = "PlotParam";
strName.TrimLeft();
strName.TrimRight();
strName.MakeLower();
if(WPtarget.Create("xxx",CREATE_HIDDEN)==true)
{
Worksheet WksEmpty(WPtarget.Layers(0));
WksEmpty.SetName("xxx"+strName);
int NumLayers=0;
foreach (Layer Layr in wpSource.Layers)
{
Worksheet WksSearch(Layr);
if(WksSearch.IsValid()==true)
{
string strWksName=WksSearch.GetName();
if(is_str_match_begin(strName,strWksName)==true)
{

Worksheet wksdata(Layr);
DataRange dr1;
DataRange dr2;
DataRange dr3;
DataRange dr4;
DataRange dr5;
DataRange dr6;

dr1.Add(wksdata, 1, "X");
dr1.Add(wksdata, 5, "Y");
dr2.Add(wksdata, 1, "X");
dr2.Add(wksdata, 6, "Y");
dr3.Add(wksdata, 1, "X");
dr3.Add(wksdata, 7, "Y");
dr4.Add(wksdata, 1, "X");
dr4.Add(wksdata, 8, "Y");
dr5.Add(wksdata, 1, "X");
dr5.Add(wksdata, 9, "Y");
dr6.Add(wksdata, 1, "X");
dr6.Add(wksdata, 10, "Y");

GraphPage gp1;
gp1.Create("origin", CREATE_HIDDEN);
GraphLayer gl1 = gp1.Layers();

//GAP_GROUP_PLOTS is specified by default, so if data range has multiple plots, they will be grouped
gl1.AddPlot(dr1, IDM_PLOT_LINESYMB);
int nMode = ALM_CUSTOM;
bool bCreate = true; // true, if no legend will create one
bool bReconstruct = false; // true, if always delete the original legend and create a new one; false, not delete old one just update
string strCustomMode = "@LN"; // use Column Units label as legend
legend_update(gl1,nMode, bCreate, bReconstruct, strCustomMode); // to update the legend loaded in from template
gl1.Rescale();
gp1.SetShow();


GraphPage gp2;
gp2.Create("origin", CREATE_HIDDEN);
GraphLayer gl2 = gp2.Layers();

//GAP_GROUP_PLOTS is specified by default, so if data range has multiple plots, they will be grouped
gl2.AddPlot(dr2, IDM_PLOT_LINESYMB);

gl2.Rescale();
legend_update(gl2,nMode, bCreate, bReconstruct, strCustomMode); // to update the legend loaded in from template
gp2.SetShow();

GraphPage gp3;
gp3.Create("origin", CREATE_HIDDEN);
GraphLayer gl3 = gp3.Layers();

//GAP_GROUP_PLOTS is specified by default, so if data range has multiple plots, they will be grouped
gl3.AddPlot(dr3, IDM_PLOT_LINESYMB);

gl3.Rescale();
legend_update(gl3,nMode, bCreate, bReconstruct, strCustomMode); // to update the legend loaded in from template
gp3.SetShow();

GraphPage gp4;
gp4.Create("origin", CREATE_HIDDEN);
GraphLayer gl4 = gp4.Layers();

//GAP_GROUP_PLOTS is specified by default, so if data range has multiple plots, they will be grouped
gl4.AddPlot(dr4, IDM_PLOT_LINESYMB);

gl4.Rescale();
legend_update(gl4,nMode, bCreate, bReconstruct, strCustomMode); // to update the legend loaded in from template
gp4.SetShow();

GraphPage gp5;
gp5.Create("origin", CREATE_HIDDEN);
GraphLayer gl5 = gp5.Layers();

//GAP_GROUP_PLOTS is specified by default, so if data range has multiple plots, they will be grouped
gl5.AddPlot(dr5, IDM_PLOT_LINESYMB);

gl5.Rescale();
legend_update(gl5,nMode, bCreate, bReconstruct, strCustomMode); // to update the legend loaded in from template
gp5.SetShow();

GraphPage gp6;
gp6.Create("origin", CREATE_HIDDEN);
GraphLayer gl6 = gp6.Layers();

//GAP_GROUP_PLOTS is specified by default, so if data range has multiple plots, they will be grouped
gl6.AddPlot(dr6, IDM_PLOT_LINESYMB);

gl6.Rescale();
legend_update(gl6,nMode, bCreate, bReconstruct, strCustomMode); // to update the legend loaded in from template
gp6.SetShow();

NumLayers++;
}
}
}

ErrorExit: WPtarget.Destroy();
}
}

int iGraphCount=Project.GraphPages.Count(); //Current number of graphs in project
printf("grapnumber = %d\n", iGraphCount);

for (int i=1; i<=iGraphCount; i++)
{
int k=i+6;

GraphPage gp1("Graph"+i); // graph1
GraphPage gp7("Graph"+k); // graph2

GraphLayer gl1 = gp1.Layers(0); // first layer in graph1
GraphLayer gl7 = gp7.Layers(0); // first layer in graph2

DataPlot dp1 = gl1.DataPlots(0); // first data plot in graph1
DataPlot dp7 = gl7.DataPlots(0); // first data plot in graph2

XYRange xy1, xy7;
dp1.GetDataRange(xy1); // get XY data range
dp7.GetDataRange(xy7);

GraphPage gp;
gp.Create("Origin", CREATE_HIDDEN); // create a new graph
GraphLayer gl = gp.Layers();
gl.AddPlot(xy1, IDM_PLOT_LINESYMB); // add data plot to the layer
gl.AddPlot(xy7, IDM_PLOT_LINESYMB);

gl.Rescale();

gp1.Destroy(); // destroy graph1
gp7.Destroy(); // destroy graph2

gl.GroupPlots(0);
gl.LT_execute("legend");

}

Can someone probably find my mistake?

thanks!
1   L A T E S T    R E P L I E S    (Newest First)
jasonzhao Posted - 10/30/2014 : 02:39:40 AM
Hello,

X-function merge_graph is provided for user to merge graph with easy interface and avoid complexity, this page introduce the usage and I/O for merge_graph:
http://www.originlab.com/doc/X-Function/ref/merge_graph.
Based on the process you described, the merge function can be written like this :

merge_graph option:=specified graphs:="Graph1"+char(10)$+"Graph7"+char(10)$+"Graph13" row:=3 col:=1;
and "for()" statement could be used for loop through all graphs.
would you like to think about this strategy?

Best regards,
Jason Zhao
OriginLab Tech Service

The Origin Forum © 2020 Originlab Corporation Go To Top Of Page
Snitz Forums 2000