Macro (SVB) Programs Example - Creating and Customizing Graph Objects
These examples demonstrate how to create an empty graph, set data into the graph, and then add various customizations.
- Creating a blank graph
- Let's begin by creating a simple graph object. Create a new
macro program and enter (or copy and paste) the program instructions shown below:
Option Base 1 Sub Main Dim g As New Graph g.Visible = True End Sub
At this point, variable g will hold the graph; however, there is no content (nor content area), so the next thing to do is to create a graph object to hold any data, customizations, etc.
We have now created a blank 2D graph and have the object with all its properties and methods in variable go. As mentioned in various places throughout this documentation, to quickly review the object model for graphs, you can display the Object Browser and select the StatisticaGraphics library.
- Setting data into the graph
- Next, let's set data into the blank graph. To do so, type in the following program:
Option Base 1 Sub Main Dim g As New Graph Dim go As GraphObject Set go=g.GraphObject go.CreateContent(scg2DGraph) ' Create data: ' Henon Strange Attractor; see Welstead, 1994, Neural Networks. Dim Size As Long Size = 10000 ReDim h1(Size) As Double, h2(Size) As Double Dim hh1 As Double, hh2 As Double hh1 = 0 hh2 = 0 For i=1 To Size h1(i)=1 + hh2 - 0.1*hh1*hh1 h2(i)=.9998*hh1 hh1=h1(i) hh2=h2(i) Next i ' Now set the data in the 2D Graph, as a scatterplot: ' First add a plot: Dim l2 As Layout2D Set l2 = go.Content ' Variable l2 contains the 2D Layout object; next ' retrieve the plots in the current graph. Dim ps As Plots2D Set ps = l2.Plots ' Create a new 2D simple plot via the Add method. Dim p2d As Plot2D Set p2d = ps.Add(scgSimplePlot,Size) ' Now retrieve the variables in the first plot, i.e. the one ' we just created. Dim Vx As Variable, Vy As Variable Set Vx = p2d.Variable(1) Set Vy = p2d.Variable(2) ' Finally, set the new values. For i = 1 To SizeVx.Value(i) = h1(i) Vy.Value(i) = h2(i) Next i ' Make the graph visible g.Visible = True End Sub
Here is the graph that will be created:
- Adding a title to the graph
- Next, let's write a subroutine to add a title to the graph. To do so, right before the statement g.Visible = True add a call to a new subroutine, and define the subroutine as shown below:
SetTitleOfMyGraph g,"Henon Strange Attractor", "Arial Black", 15 g.Visible = True End Sub Sub SetTitleOfMyGraph(g As Graph,MyTitle As String, _ FontName As String, FontSize As Long) Dim t As Titles Set t = g.Titles Dim t1 As Title 'Create a new main title. Set t1 = t.Add(scgMainTitle,MyTitle) t1.Font.Size = FontSize t1.Font.FaceName = FontName End Sub Note how we not only have created a title, but also modified the default font and font size for the title. Also, for illustration purposes, this code could be written much more "densely" by not explicitly defining the respective objects; so an alternate way to write this routine would be: Sub SetTitleOfMyGraph(g As Graph,MyTitle As String, _ FontName As String, FontSize As Long) g.Titles.Add(scgMainTitle,MyTitle) g.Titles.Item(1).Font.Size = FontSize g.Titles.Item(1).Font.FaceName = FontName End Sub
- Changing the scales
- You can now add the following code (subroutines) to change the scaling for the axes and the font that is used for the axis labels. Again, before the statement g.Visible=True add the calls to the functions as shown below:
ChangeAxisScaling l2.Axes.XAxis, -8.0, 1.0, 8.0, _ "Arial Black", 12 ChangeAxisScaling l2.Axes.YAxis, -8.0, 1.0, 8.0, _ "Arial Black", 12g.Visible=True End Sub Sub ChangeAxisScaling (x As Axis2D, _ xmin As Double, xstep As Double, xmax As Double, _ FontName As String, FontSize As Long) x.RangeMode = scgManualRange x.SetManualRange(xmin,xmax) x.StepMode = scgManualStep x.StepSize = xstep x.Font.Size = FontSize x.Font.Face.FaceName = FontName End Sub Extra objects - adding custom text. Next, let's write a subroutine to add a brief description of what is being plotted as a custom text. Again, we will make a subroutine, this time to place some custom text in a particular location in the graph. AddCustomTextToMyGraph g, _ "Compute Recursively:" + vbCrLf + _ " x(i)=1+y(i-1)-.1*x(i-1)^2" + vbCrLf + _ " y(i)=.9998*x(i-1) ", _ 7, 7, "Arial Black", 12g.Visible=True End Sub Sub Add CustomTextToMyGraph ( g As Graph, _ t As String, x As Double, y As Double, _ FontName As String, FontSize As Long) Dim tob As TextObject Set tob = g.ExtraObjects.AddDynamicText(t,x,y) tob.Parameters.AnchorPosition=2 tob.Text.Font.FaceName = FontName tob.Text.Font.Size = FontSize End Sub
Depending on your current system defaults, the final graph will look like this:
Note: the Graph.ExtraObjects object contains methods to add not only text but also (poly-) lines, arrows, shapes, and other graphs, i.e., to embed those custom (extra-) objects into your graph. Each object has an index (displayed on the object properties dialog title bar) that can be referenced in SVB. Thus, the Statistica graphics library provides a comprehensive tool to build highly customized graphical displays.For example, if a graph has 2 added shape objects (e.g., a circle and a rectangle), the following code will increase the line thickness of the second object.
Sub Main Dim oG As GraphSet oG = ActiveGraphExDim oS As ShapeObjectSet oS = oG.ExtraObjects.Item(2) oS.Line.Weight = oS.Line.Weight*2 End Sub