Plot waves from different folders in different graphs with consistent colours and markers

This snippet assumes that:
(1) your data is organized in different folders within root
(2) wave names across different folder are the same
(3) you want to create different graphs, each of them containing data from different folders, with consistent markers and colours
(4) colours and markers are predefined within a wave in root

Here is an example: First, make some data:

NewDataFolder/O/S run1
Make/O/N=20 SiO2,MgO,K2O
SiO2=45+p+enoise(3)
MgO=15-p/2+enoise(2)
K2O=abs(p+enoise(1))
SetDataFolder root:
NewDataFolder/O/S run2
Make/O/N=20 SiO2,MgO,K2O
SiO2=45+p+enoise(3)
MgO=15-p/2+enoise(2)
K2O=abs(p+enoise(1))
SetDataFolder root:
NewDataFolder/O/S run3
Make/O/N=20 SiO2,MgO,K2O
SiO2=45+p+enoise(3)
MgO=15-p/2+enoise(2)
K2O=abs(p+enoise(1))
SetDataFolder root:


Next, you'll need to define a colour and marker wave:
Make/O/N=(3,4) MarkerWave
// set x DimLabels matching the folders from which to plot data
SetDimLabel 0, 0, run1, MarkerWave
SetDimLabel 0, 1, run2, MarkerWave
SetDimLabel 0, 2, run3, MarkerWave
// set y Dimlabels for colour and marker type
SetDimLabel 1, 0, R, MarkerWave  
SetDimLabel 1, 1, G, MarkerWave  
SetDimLabel 1, 2, B, MarkerWave  
SetDimLabel 1, 3, Marker, MarkerWave  
// fill in some values
MarkerWave[0][0]= {0,0,65535}
MarkerWave[0][1]= {0,65535,65535}
MarkerWave[0][2]= {65535,0,0}
MarkerWave[0][3]= {16,19,23}
Edit MarkerWave.ld


Next, use the following snippet....:

function PlotXYDataFromFolders(MarkerWave, GraphName, x, y)
    wave/Z markerWave
    string GraphName
    string x, y
   
    // make sure we are in Root and check if MarkerWave exists
    SetDataFolder root:
    if(!WaveExists(MarkerWave))
        DoAlert 0, "No MakerWave!"
        return 0
    endif
       
    // define some variables and strings
    variable nFolders = DimSize(MarkerWave, 0)
    variable i
    string folder
    string Traces, ThisTrace
    string legendStr =""
   
    // Check if graph exists, if yes kill it and make a new one
    DoWindow/F $GraphName
    if(V_flag)
        KillWindow $GraphName
    endif
    Display/N=$GraphName
       
    // run through all folder listed in MarkerWave  
    for(i=0; i<nFolders; i+=1)
       
        // get folder name from DimensionLabel of MarkerWave
        folder = GetDimLabel(MarkerWave, 0, i)
       
        // check if this folder exists, if not give error
        if(!DataFolderExists(folder))  
            DoAlert 0, "No such folder"
            printf "No folder %s\r", folder
            return -1
        endif
       
        // folder exists: set the data folder
        SetDatafolder $"root:"+ folder
       
        // check if waves x and y exist
        wave/z xx = $x
        wave/z yy = $y
        if( !WaveExists(xx) || !WaveExists(yy) )
            DoAlert 0, "WaveExists Error"
            SetDataFolder root:
            return -2
        endif
       
        // x and y exist: now append the waves
        AppendToGraph yy vs xx
       
        // get the name of the last trace added to graph
        traces = TraceNameList("", ";", 1)
        ThisTrace = StringFromList(i, traces)
       
        // set mode to "Marker"
        ModifyGraph mode($ThisTrace) = 3
       
        // change the marker
        ModifyGraph marker($ThisTrace) = MarkerWave[i][%Marker]
       
        // change the colour
        ModifyGraph rgb($ThisTrace) = (MarkerWave[i][%R], MarkerWave[i][%G], MarkerWave[i][%B])
       
        // add sqequence to legend string
        legendstr += "\\s("+ThisTrace+") " + folder +"\r"
       
        SetDataFolder root:
    endfor
   
    // add axis labels
    Label Bottom, x
    Label Left, y
   
    // add legend
    Legend/C/N=text0 legendStr
   
    // add more formatting....
    ModifyGraph useMrkStrokeRGB=1
    ModifyGraph mirror = 2
   
    return 1
end


....and execute:
PlotXYDataFromFolders(MarkerWave,"MgOvsSiO2", "SiO2", "MgO")
PlotXYDataFromFolders(MarkerWave,"K2OvsSiO2", "SiO2", "K2O")

Forum

Support

Gallery

Igor Pro 9

Learn More

Igor XOP Toolkit

Learn More

Igor NIDAQ Tools MX

Learn More