Arrange Left Axes

// ArrangeLeftAxes(graphName)
// graphName contains the name of a graph to which you have appended waves using one or more free left axes.
// ArrangeLeftAxes arranges the left axes to allocate the available vertical space evenly.
// For a demo execute the Demo function below.
static Function ArrangeLeftAxes(graphName)
    String graphName                // "" for top graph
   
    if (strlen(graphName) == 0)
        graphName = WinName(0, 1)
        if (strlen(graphName) == 0)
            return -1                   // No graphs - should not happen
        endif
    endif

    String leftAxisList = AxisList(graphName)
    leftAxisList = ReplaceString("bottom;", leftAxisList, "")
    Variable numLeftAxes = ItemsInList(leftAxisList)
    if (numLeftAxes == 0)
        return 0                    // There are no waves selected for display
    endif
   
    if (CmpStr(leftAxisList, "left;") == 0)
        return 0                    // We are not stacking traces so there is nothing to do
    endif

    Variable groutSize = .05
    Variable numGrouts = numLeftAxes - 1
   
    // Determine the percentage of plot area height to allocate to each left axis
    Variable leftAxisLength = 1.00
    if (numLeftAxes > 1)
        leftAxisLength = (1.00 - numGrouts*groutSize) / numLeftAxes
    endif
   
    Variable leftAxisStart = 0
   
    Variable i
    for(i=0; i<numLeftAxes; i+=1)
        String leftAxisName = StringFromList(i, leftAxisList)
        ModifyGraph /W=$graphName axisEnab($leftAxisName)={leftAxisStart,leftAxisStart+leftAxisLength}
        ModifyGraph /W=$graphName freePos($leftAxisName)=0
        leftAxisStart += leftAxisLength + groutSize

        ModifyGraph /W=$graphName lblPosMode($leftAxisName)=2, lblMargin($leftAxisName)=5       // Label stays near left edge of graph window
    endfor
End

Function Demo()
    DoWindow /K DemoGraph       // Kill graph if it already exists

    Make /O wave0 = sin(x/8)
    Make /O wave1 = cos(x/8)
    Make /O wave2 = wave0 * wave1
   
    Display /N=DemoGraph /W=(35,44,832,530) /L=left0 wave0
    AppendToGraph /L=left1 wave1
    AppendToGraph /L=left2 wave2

    ArrangeLeftAxes("DemoGraph")
End

Forum

Support

Gallery

Igor Pro 9

Learn More

Igor XOP Toolkit

Learn More

Igor NIDAQ Tools MX

Learn More