# Tiled Graphs

This is used to plot a bunch of waves, or columns of waves, on one graph, each with its own set of axes. So you could plot 12 waves in a 4x3 matrix of "subgraphs". They are all still associated with the same window, though. Create a blank graph before using.

Function TileAppend(waves,rows,cols[,left,right,low,high,xLog,yLog,box,labels,xLabel,yLabel,xMargin,yMargin,grout])
wave /wave waves // Can be a bunch of 1D waves, a matrix (will plot columns), or a stack (will plot beams, and use the dimension sizes of the stack instead of provided rows and cols values).
variable rows,cols
variable left,right // Left and right values for x-axes.
variable low,high // Low and high values for y-axes.
variable xLog,yLog // Set x and/or y axes to log scale.
variable box // 0 for no mirror axes, 1 for only mirror x-axes, 2 for only mirror y-axes, and 3 for mirror axes both ways.
string labels // Labels for axes.
string xLabel,yLabel // Master labels for the axes.
variable xMargin,yMargin // Margins (as a fraction of graph size) for the axes closests to the edge of the graph window.
variable grout // Grout as a fraction of the graph window size.

xMargin=paramisdefault(xMargin) ? 0.02 : xMargin
yMargin=paramisdefault(yMargin) ? 0.02 : yMargin
grout=paramisdefault(grout) ? 0.02 : grout

wave w=waves[0]
if(dimsize(w,1)<=1) // One of a bunch of 1D waves.
variable numWaves=numpnts(waves)
string mode="waves"
elseif(dimsize(w,2)<=1) // A matrix.
numWaves=dimsize(w,1)
mode="matrix"
else // A stack.
numWaves=dimsize(w,0)*dimsize(w,1)
rows=dimsize(w,0)
cols=dimsize(w,1)
mode="stack"
endif

variable i
for(i=0;i<numwaves;i+=1)
wave w=waves[i]
if(!waveexists(w))
continue
endif
variable row=mod(i,rows)
variable col=floor(i/rows)
string yAxis,xAxis
sprintf xAxis,"x_%d",col
sprintf yAxis,"y_%d",row
strswitch(mode)
case "matrix":
appendtograph /L=\$yaxis /B=\$xAxis w[][i]
break
case "stack":
appendtograph /L=\$yaxis /B=\$xAxis w[row][col][]
break
default:
appendtograph /L=\$yaxis /B=\$xAxis w
break
endswitch

if(!paramisdefault(left) && !paramisdefault(right))
setAxis \$xAxis left,right
endif
if(!paramisdefault(low) && !paramisdefault(high))
setAxis \$yAxis low,high
endif
ModifyGraph axOffset(\$yAxis)=-4,axOffset(\$xAxis)=-1,btLen=1
variable xLow=xMargin+col/cols*(1-xMargin)
variable xHigh=xMargin+((col+1)/cols-grout)*(1-xMargin)
variable yLow=yMargin+row/rows*(1-yMargin)//1-(row+1)/rows+yMargin
variable yHigh=yMargin+((row+1)/rows-grout)*(1-yMargin)//1-row/rows-grout
variable numXTicks=ceil(10/cols)
variable numYTicks=ceil(10/rows)
//print xLow,xHigh,yLow,yHigh
modifygraph axisEnab(\$xAxis)={xLow,xHigh},freepos(\$xAxis)={yMargin,kwFraction},lblpos(\$xAxis)=100,nticks(\$xAxis)=numXTicks,log(\$xAxis)=xLog
modifygraph axisEnab(\$yAxis)={yLow,yHigh},freepos(\$yAxis)={xMargin,kwFraction},lblpos(\$yAxis)=100,nticks(\$yAxis)=numYTicks,log(\$yAxis)=yLog
if(!paramisdefault(labels))
strswitch(labels)
case "waveNames":
label \$xAxis nameofwave(waves[col])
label \$yAxis nameofwave(waves[row])
break
case "dfNames":
label \$xAxis getwavesdatafolder(waves[col],0)
label \$yAxis getwavesdatafolder(waves[row],0)
break
default:
label \$xAxis stringfromlist(col,labels)
label \$yAxis stringfromlist(row,labels)
break
endswitch
endif
if(box & 1)
if(row>0)
sprintf xAxis,"xLow_%d_%d",row,col
newfreeaxis /b \$xAxis
ModifyGraph axisEnab(\$xAxis)={xLow,xHigh},freepos(\$xAxis)={yLow,kwFraction},nticks(\$xAxis)=0
endif
sprintf xAxis,"xHigh_%d_%d",row,col
newfreeaxis /b \$xAxis
ModifyGraph axisEnab(\$xAxis)={xLow,xHigh},freepos(\$xAxis)={yHigh,kwFraction},nticks(\$xAxis)=0
endif
if(box & 2)
if(col>0)
sprintf yAxis,"yLow_%d_%d",row,col
newfreeaxis /l \$yAxis
ModifyGraph axisEnab(\$yAxis)={yLow,yHigh},freepos(\$yAxis)={xLow,kwFraction},nticks(\$yAxis)=0
endif
sprintf yAxis,"yHigh_%d_%d",row,col
newfreeaxis /l \$yAxis
ModifyGraph axisEnab(\$yAxis)={yLow,yHigh},freepos(\$yAxis)={xHigh,kwFraction},nticks(\$yAxis)=0
endif
endfor
if(!paramisdefault(xLabel))
textbox /o=0/f=0/t=1/a=mt/x=0/y=0 xLabel
endif
if(!paramisdefault(yLabel))
textbox /o=90/f=0/t=1/a=rc/x=0/y=0 yLabel
endif
End

Forum

Support

Gallery