This article contains a sample script for creating a scatter plot matrix from a data file. Prompts for worksheet, number of variables, first and last rows, and total graph size.
To run this script:
- Copy the script below, or click here to download the BAS file: Scatter Plot Matrix.BAS
- In a Windows Explorer window, navigate to C:\Program Files\Golden Software\Grapher 13.
- Double click on Scripter.exe to launch Scripter.
- Press Ctrl+A to select all of the existing lines then press Delete.
- If you copied this script, press Ctrl+V to paste it into Scripter. If you downloaded it, click File | Open, select the BAS file from your downloads directory, and click Open.
- Click Script | Run to run the script.
OR:
- Copy the script below.
- Open Grapher and turn on the Script Manager by clicking View | Display | Script Manager.
- Press Ctrl+A to select all of the existing lines in the Script Manager and then press DELETE.
- Press Ctrl+V to paste it into the Script Manager.
- Click the Start/Resume icon () in the Script Manager.
*********
Sub Main
'Create Grapher as an Object
Dim Grapher As Object
'Start Grapher
Set Grapher = CreateObject("Grapher.Application")
'Make Grapher visible
Grapher.Visible = True
'Create a new document window
Set Plot1 = Grapher.Documents.Add(grfPlotDoc)
'Set page size
Plot1.PageSetup.pageSize = grfLetter
Plot1.PageSetup.Orientation = grfLandscape
pageheight = 8.5
pagewidth = 11
'Set the page units to inches
Plot1.Windows.Item(1).PageUnits(grfInches)
'Prompts for data file, columns, number of matrix columns, rows, etc.
DataFile$ = GetFilePath$()
Num_Variables = CLng(InputBox("How many variables are there?"))
First_Row = CLng(InputBox("What is the first row of data?"))
Last_Row = CLng(InputBox("What is the last row of data?"))
Tot_Width = CLng(InputBox("How big should the matrix be in inches?"))
'Create initial histogram graph
Set Graph1 = Plot1.Shapes.AddHistogramGraph(DataFile$,1)
Set Histogram1 = Graph1.Plots.Item(1)
'Set histogram properties
Histogram1.AutoLastRow = False
Histogram1.LastRow = Last_Row
Histogram1.AutoFirstRow = False
Histogram1.FirstRow = First_Row
'Set-up the initial axes
Set YAxis1 = Graph1.Axes.Item(2)
Set XAxis1 = Graph1.Axes.Item(1)
YAxis1.Link.ToAxis = "X Axis 1"
YAxis1.Link.xPos = True
XAxis1.Link.ToAxis = "Y Axis 1"
XAxis1.Link.yPos = True
XAxis1.Link.YPosOffset = Tot_Width/Num_Variables
XAxis1.length = Tot_Width/Num_Variables
YAxis1.length = Tot_Width/Num_Variables
XAxis1.Tickmarks.MajorSide = grfTicksTopRight
XAxis1.Tickmarks.MinorSide = grfTicksNone
XAxis1.TickLabels.MajorSide = grfTicksTopRight
XAxis1.TickLabels.MinorOn = False
XAxis1.title.Side = grfAxisTitleRightTop
XAxis1.title.worksheet = DataFile$
XAxis1.title.text = "<<@a1>>"
YAxis1.Visible = False
'Add X axes to the graph
For i = 2 To Num_Variables
Set XAxis = Graph1.AddAxis(grfXAxis)
XAxis.length = Tot_Width/Num_Variables
XAxis.Link.ToAxis = "X Axis 1"
XAxis.Link.xPos = True
XAxis.Link.XPosOffset = Tot_Width/Num_Variables*(i-1)
XAxis.Link.yPos = True
XAxis.Link.YPosOffset = 0
XAxis.Link.Limits = False
XAxis.AutoMin = True
XAxis.AutoMax = True
XAxis.Tickmarks.MajorSide = grfTicksTopRight
XAxis.Tickmarks.MinorSide = grfTicksNone
XAxis.TickLabels.MajorSide = grfTicksTopRight
XAxis.TickLabels.MinorOn = False
XAxis.title.Side = grfAxisTitleRightTop
XAxis.title.worksheet = DataFile$
'Set the title from the cell - converting the i to a column letter with Chr(i+64)
XAxis.title.text = "<<@"+Chr(i+64)+"1>>"
ConvertToLetter = ""
Next i
'Add first Y axis to the graph
Set YAxis2 = Graph1.AddAxis(grfYAxis)
YAxis2.Link.xPos = True
YAxis2.Link.XPosOffset = 0
YAxis2.Link.ToAxis = "Y Axis 1"
YAxis2.Link.yPos = True
YAxis2.Link.YPosOffset = 0
YAxis2.Link.length = True
YAxis2.length = 1.66667
YAxis2.title.worksheet = DataFile$
YAxis2.title.text = "<<@a1>>"
YAxis2.Grid.AtMajorTicks = False
'Add each additional Y axis to the graph
For i = 2 To Num_Variables
Set YAxis = Graph1.AddAxis(grfYAxis)
YAxis.length = Tot_Width/Num_Variables
YAxis.Link.ToAxis = "Y Axis 2"
YAxis.Link.xPos = True
YAxis.Link.XPosOffset = 0
YAxis.Link.yPos = True
YAxis.Link.YPosOffset = -1*Tot_Width/Num_Variables*(i-1)
YAxis.Link.Limits = False
YAxis.AutoMin = True
YAxis.AutoMax = True
YAxis.Grid.AtMajorTicks = False
YAxis.title.worksheet = DataFile$
'Set the title from the cell - converting the i to a column letter with Chr(i+64)
YAxis.title.text = "<<@"+Chr(i+64)+"1>>"
ConvertToLetter = ""
Next i
'Add the master axes
Set XAxisMaster = Graph1.AddAxis(grfXAxis)
Set YAxisMaster = Graph1.AddAxis(grfYAxis)
'Set Master X properties
With XAxisMaster
.Tickmarks.MajorSide = grfTicksOff
.Tickmarks.MinorSide = grfTicksOff
.TickLabels.MajorOn = False
.TickLabels.MinorOn = False
.length = Tot_Width
.AutoMin = False
.Min = 0
.AutoMax = False
.Max = Num_Variables
.Grid.AtMajorTicks = True
.Grid.ParallelTo = YAxisMaster.Name
.Tickmarks.MajorSpacing = 1
.Link.ToAxis = "X Axis 1"
.Link.yPos = True
.Link.YPosOffset = Tot_Width*-1
.Link.xPos = True
.Link.XPosOffset = 0
End With
Set YAxis5 = Graph1.Axes.Item(8)
'Set Master Y properties
With YAxisMaster
.Tickmarks.MajorSide = grfTicksOff
.Tickmarks.MinorSide = grfTicksOff
.TickLabels.MajorOn = False
.TickLabels.MinorOn = False
.length = Tot_Width
.AutoMin = False
.Min = 0
.AutoMax = False
.Max = Num_Variables
.Grid.AtMajorTicks = True
.Grid.ParallelTo = XAxisMaster.Name
.Tickmarks.MajorSpacing = 1
controllingaxis = "Y Axis"+Str(Num_Variables+1)
.Link.ToAxis = Str(controllingaxis)
.Link.yPos = True
.Link.YPosOffset = 0
.Link.xPos = True
.Link.XPosOffset = 0
End With
'Add the scatter plots
For i = 1 To Num_Variables 'i increments row = y
For j = 1 To Num_Variables 'j increments column = x
If i <> j Then
XAxisName = "X Axis" + Str$(j)
YAxisName = "Y Axis" + Str$(i+1)
Set LineScatterPlot1 = Graph1.AddLinePlot(DataFile$,j,i,XAxisName,YAxisName)
LineScatterPlot1.symbolFreq = 1
LineScatterPlot1.line.style = "Invisible"
LineScatterPlot1.AutoLastRow = False
LineScatterPlot1.LastRow = Last_Row
LineScatterPlot1.AutoFirstRow = False
LineScatterPlot1.FirstRow = First_Row
End If
Next j
Next i
'Add the other histograms
For i = 2 To Num_Variables
Set YAxisHist = Graph1.AddAxis(grfYAxis)
YAxisHist.length = Tot_Width/Num_Variables
YAxisHist.Link.ToAxis = "Y Axis 2"
YAxisHist.Link.xPos = True
YAxisHist.Link.XPosOffset = 0
YAxisHist.Link.yPos = True
YAxisHist.Link.YPosOffset = -1*Tot_Width/Num_Variables*(i-1)
YAxisHist.Visible = False
XAxisName = "X Axis"+ Str$(i)
Set Histogram2 = Graph1.AddHistogram(DataFile$,i,XAxisName,YAxisHist.Name)
Histogram2.AutoLastRow = False
Histogram2.LastRow = Last_Row
Histogram2.AutoFirstRow = False
Histogram2.FirstRow = First_Row
Histogram2.ResetToDefault
Next
'Position the graph and turn off the title
Graph1.left = pagewidth/2-(Graph1.width/2)
Graph1.top = pageheight/2+(Graph1.width/2)
Graph1.title.text = ""
End Sub
Updated September 24, 2018
Comments
Please sign in to leave a comment.