There is not a direct way to display multiple symbols of different sizes for each bubble plot if you have multiple bubble plots, but you can emulate this result by running the script below.
- Copy the script below, or click here to download the BAS file: BubbleLegend.BAS.
- Open your Grapher project (like the attached ExampleBubblePlot.gpj), making sure it just contains the bubble plot graph(s).
- Make sure you have the Script Manager showing. If not, click View | Display | Script Manager to turn it on.
- If you copied this script, press Ctrl+V to paste it into Scripter. If you downloaded it, click the open file icon (), select the BAS file from your downloads directory, and click Open.
- Click the green arrow () to run the script.
- Move the legend to where you want it.
- If the bubbles or text overlap the outline, change the limits and/or length of the x and/or y axis for the 'legend' graph.
'=============================== 'On the active document, looks for a bubble plot.If found, create a legend by 'creating a mini bubble plot that displays the values of the bubbles '(additional worksheet data gets appended To the original bubble's data). '=============================== Sub Main Dim Grapher As Object Set Grapher = CreateObject("Grapher.Application") Grapher.Visible = True Set Doc = Grapher.Documents.Active firsty = 100000 graphcount = 0 'Look for bubble plot Dim plot As Object For i=1 To Doc.Shapes.Count Set item = Doc.Shapes.Item(i) If item.Type = grfShapeGraph Then graphcount = graphcount+1 For j=1 To item.Plots.Count If item.Plots.Item(j).PlotType = grfTernaryBubblePlot Or item.Plots.Item(j).PlotType = grfBubblePlot Or item.Plots.Item(j).PlotType = grfXYZBubblePlot Then Set plot = item.Plots.Item(j) 'Different kinds of bubble plots have different ways to describe the bubble column bubbleCol = 0 Select Case(plot.PlotType) Case grfBubblePlot bubbleCol = plot.zCol Case grfXYZBubblePlot bubbleCol = plot.sizeCol Case grfTernaryBubblePlot bubbleCol = plot.BubbleCol End Select 'First, prepare the worksheet Set wks = plot.DisplayWorksheet newCol = wks.UsedRange.LastColumn+1 wks.Cells(1,newCol).Value = firsty wks.Cells(2,newCol).Value = firsty wks.Cells(3,newCol).Value = firsty Set stats = wks.Range(plot.FirstRow, bubbleCol, plot.LastRow, bubbleCol).Statistics(True,False,wksStatsAll,wksIncludeAll,0,0) wks.Cells(1,newCol+1).Value = stats.Minimum wks.Cells(2,newCol+1).Value = stats.Median wks.Cells(3,newCol+1).Value = stats.Maximum firsty = firsty + 100000 Doc.Activate 'done with worksheet now 'Create a bubble plot to serve as the legend Set legGraph = Doc.Shapes.AddBubblePlotGraph(plot.worksheet,-1,newCol,newCol+1,"Legend for " + plot.Name) Set legPlot = legGraph.Plots.Item(1) 'Display legend properties as original bubble plot Doc.Selection.DeselectAll plot.Select Doc.Selection.CopyFormat legPlot.PasteFormat legPlot.Labels.ShowLabels = True legPlot.Labels.LabelsInYCol = False legPlot.Labels.labelsCol = newCol+1 End If Next End If Set plot = Nothing 'reset Next legstrt2 = graphcount+2 legstrt1 = graphcount+1 'Combines all of the 'legend' bubble plots into a single graph For i = legstrt2 To Doc.Shapes.Count Doc.Shapes.Item(i).TransferPlotToGraph(Doc.Shapes.Item(legstrt1),Doc.Shapes.Item(i).Plots.Item(1)) Next Doc.Selection.DeselectAll 'Deletes the now-empty graphs that had previously contained the other 'legend' bubble plots For i = legstrt2 To Doc.Shapes.Count Doc.Shapes.Item(i).Select Next Doc.Selection.Delete 'Assigns variables to the X and Y axes for the graph containing the 'legend' bubble plots Set XAxis1 = Doc.Shapes.Item(legstrt1).Axes.Item(1) Set YAxis1 = Doc.Shapes.Item(legstrt1).Axes.Item(2) 'Sets Y axis properties YAxis1.length = 2 YAxis1.AutoMin = False YAxis1.Min = 50000 YAxis1.AutoMax = False YAxis1.Max = 370000 YAxis1.TickLabels.MajorOn = False YAxis1.Tickmarks.MajorSide = grfTicksOff YAxis1.Tickmarks.MinorSide = grfTicksOff 'Sets X axis properties XAxis1.length = 2 XAxis1.Select XAxis1.AutoMax = False XAxis1.Max = 3.5 XAxis1.AutoMin = False XAxis1.Min = 0.8 XAxis1.TickLabels.MajorOn = False XAxis1.Tickmarks.MajorSide = grfTicksOff XAxis1.Tickmarks.MinorSide = grfTicksOff 'Sets the background line style for the legend to Solid Doc.Shapes.Item(legstrt1).BackLine.style = "Solid" End Sub
Updated August 2, 2017