OK, figured it out. Hope this may help someone else. I've kinda been on a bubble chart kick lately. Been remembering the cadence. Its all driven on the last stats command.
1st stat is x axis, 2nd is y axis, 3rd is bubble size (should be count or integer), then the 1st by clause is just a label in the hover-over (no visual representation in the graph), second by clause is the legend and will make different color bubbles. If you only have one "by" clause all bubbles will be the same color and there will be a "null" legend.
index=app sourcetype=type host=host Action=* ID=* LOCATION=* ROLE=*
|eval Duration=DurationTotal/1000
|transaction ID startswith=EndCall maxspan=1h maxpause=15m eventcount
|stats dc(Action) as dActions, sum(duration) as calldurations,sum(Duration) as appduration by ID LOCATION ROLE|where dActions>3
|eval percentapp=round(appduration/calldurations*100,0)
|stats avg(percentapp) as PercentInApp,avg(calldurations) as AverageCallDuration, c as TotalCalls by LOCATION ROLE
... View more