Stacked plots / Multiple plots LAYOUT
ChrLie
Similar to:
http://www.igorexchange.com/node/7210
but displays existing graphs in a single layout page. Note, that the layout is set to a custom size to preserve the original, absolute graph sizes. The entire layout may then be saved as a single graph. Execute the following to try it:
make/D/O/N=1000 aa, bb, cc, dd
setscale/i x, 0, 3*pi, "", aa,bb, cc, dd
aa=sin(x); display aa
bb=cos(x); display bb
cc=tan(x); display cc
dd=abs(sin(x)); display dd
setscale/i x, 0, 3*pi, "", aa,bb, cc, dd
aa=sin(x); display aa
bb=cos(x); display bb
cc=tan(x); display cc
dd=abs(sin(x)); display dd
Then use the snippet...
function MultiGraphLayout(GraphList, nCols, spacing, layoutName)
string GraphList // semicolon separated list of graphs to be appended to layout
variable nCols // number of graph columns
string layoutName // name of the layout
variable spacing // spacing between graphs in points!
// how many graphs are there and how many rows are required
variable nGraphs = ItemsInList(GraphList)
variable nRows = ceil(nGraphs / nCols)
variable LayoutWidth, LayoutHeight
variable gWidth, gHeight
variable maxWidth = 0, maxHeight = 0
variable left, top
variable i, j, n = 0
string ThisGraph
// detect total layout size from individual graph sizes; get maximum graph size as column/row size
for(i=0; i<nGraphs; i+=1)
ThisGraph = StringFromList(i, GraphList)
GetWindow $ThisGraph gsize
gWidth = (V_right - V_left)
gHeight = (V_bottom - V_top)
// update maximum
maxWidth = gWidth > maxWidth ? gWidth : maxWidth
maxHeight = gHeight > maxHeight ? gHeight : maxHeight
endfor
// calculate layout size
LayoutWidth = maxWidth * nCols + ((nCols + 1) * spacing)
LayoutHeight = maxHeight * nRows + ((nRows +1) * spacing)
// make layout; kill if it exists
DoWindow $layoutName
if(V_flag)
KillWindow $layoutName
endif
NewLayout/N=$layoutName/K=1/W=(517,55,1451,800)
LayoutPageAction size=(LayoutWidth, LayoutHeight), margins=(0,0,0,0)
ModifyLayout mag=0.75
//append graphs
top = spacing
for(i=0; i<nRows; i+=1)
// reset vertical position for each column
left = spacing
for (j=0; j< nCols; j+=1)
ThisGraph = StringFromList(n, GraphList)
if(strlen(ThisGraph) == 0)
return 0
endif
GetWindow $ThisGraph gsize
gWidth = (V_right - V_left)
gHeight = (V_bottom - V_top)
AppendLayoutObject/F=0 /D=1 /R=(left, top, (left + gWidth), (top + gHeight)) graph $ThisGraph
// shift next starting positions to the right
left += maxWidth + spacing
// increase plot counter
n += 1
endfor
// shift next starting positions dwon
top += maxHeight + spacing
endfor
return 1
end
string GraphList // semicolon separated list of graphs to be appended to layout
variable nCols // number of graph columns
string layoutName // name of the layout
variable spacing // spacing between graphs in points!
// how many graphs are there and how many rows are required
variable nGraphs = ItemsInList(GraphList)
variable nRows = ceil(nGraphs / nCols)
variable LayoutWidth, LayoutHeight
variable gWidth, gHeight
variable maxWidth = 0, maxHeight = 0
variable left, top
variable i, j, n = 0
string ThisGraph
// detect total layout size from individual graph sizes; get maximum graph size as column/row size
for(i=0; i<nGraphs; i+=1)
ThisGraph = StringFromList(i, GraphList)
GetWindow $ThisGraph gsize
gWidth = (V_right - V_left)
gHeight = (V_bottom - V_top)
// update maximum
maxWidth = gWidth > maxWidth ? gWidth : maxWidth
maxHeight = gHeight > maxHeight ? gHeight : maxHeight
endfor
// calculate layout size
LayoutWidth = maxWidth * nCols + ((nCols + 1) * spacing)
LayoutHeight = maxHeight * nRows + ((nRows +1) * spacing)
// make layout; kill if it exists
DoWindow $layoutName
if(V_flag)
KillWindow $layoutName
endif
NewLayout/N=$layoutName/K=1/W=(517,55,1451,800)
LayoutPageAction size=(LayoutWidth, LayoutHeight), margins=(0,0,0,0)
ModifyLayout mag=0.75
//append graphs
top = spacing
for(i=0; i<nRows; i+=1)
// reset vertical position for each column
left = spacing
for (j=0; j< nCols; j+=1)
ThisGraph = StringFromList(n, GraphList)
if(strlen(ThisGraph) == 0)
return 0
endif
GetWindow $ThisGraph gsize
gWidth = (V_right - V_left)
gHeight = (V_bottom - V_top)
AppendLayoutObject/F=0 /D=1 /R=(left, top, (left + gWidth), (top + gHeight)) graph $ThisGraph
// shift next starting positions to the right
left += maxWidth + spacing
// increase plot counter
n += 1
endfor
// shift next starting positions dwon
top += maxHeight + spacing
endfor
return 1
end
...and append all graphs into one layout with:
MultiGraphLayout(WinList("*", ";", "WIN:1"), 2, 20, "AllGraphLayout")
Forum
Support
Gallery
Igor Pro 9
Learn More
Igor XOP Toolkit
Learn More
Igor NIDAQ Tools MX
Learn More