Hi
a short description of the problem.
X - STate (points 1 .. 100)
Y - Importance (points 1 .. 100)
Size - Value (Currency 1,00 .. 1.000.0000.000,00)
When drawing the bubbe chart, the X and Y axis are adjusted so that the bubbele will fit. I'd rather have a separate axis for the bubble size, or somehow scale the bubble (rendered) size independent of the X and Y axis.
I'd like it even better if the right axis could be used to determine the numerical value of the bubble size.
It would be nice to be able to retrieve the actual bubble value when moving over it with the mouse, my solution now is to scale the bubble using some cusom code and reapply the factor when displaying the value. Unfortunately this drops the possibility to extract (unscaled) bubble values using the data manipulator available in the teechart editor.
Any Idea's
Regards - Hans
Bubble chart axis
-
- Newbie
- Posts: 32
- Joined: Tue Jul 21, 2009 12:00 am
- Location: Nijmegen, Netherlands
Re: Bubble chart axis
Hi Hans,
I think a screenshot of your actual program would help us to understand how are you exactly drawing your custom/right axis, what it represents, and what values you want to show when the mouse is over a bubble.
But with MarkTipsTool, I think you could show the information you want configuring the OnGetMarkText event:
I think a screenshot of your actual program would help us to understand how are you exactly drawing your custom/right axis, what it represents, and what values you want to show when the mouse is over a bubble.
But with MarkTipsTool, I think you could show the information you want configuring the OnGetMarkText event:
Code: Select all
procedure TForm1.Series1GetMarkText(Sender: TChartSeries; ValueIndex: Integer; var MarkText: string);
begin
MarkText:='X: ' + FloatToStr(Series1.XValue[ValueIndex]) + #13 +
'Y: ' + FloatToStr(Series1.YValue[ValueIndex]) + #13 +
'Radius: ' + FloatToStr(Series1.RadiusValues[ValueIndex]);
end;
Best Regards,
Yeray Alonso Development & Support Steema Software Av. Montilivi 33, 17003 Girona, Catalonia (SP) | |
Please read our Bug Fixing Policy |
-
- Newbie
- Posts: 32
- Joined: Tue Jul 21, 2009 12:00 am
- Location: Nijmegen, Netherlands
Re: Bubble chart axis
Please Check Bubble A and Bubble B in the attachment. (both .bmp and .tee)
Vert: State
Horiz: Importance
Bubble size: value that represents the sum of assets (either money:bubbleA, or counts:bubbleB)
Importance and state cannot be negative values, and are somewhere between 0..100
The object value, however, can be quite large depending on the replacement value of the objects involved. (BubbleA)
Since the bubble size is projected on the Vert axis, the vert axis scales to -28K..28K, while actual bubble center values are only between 0..100. This makes it impossible to read the Y position of a bubble. The horiz appears to be independent of the bubble size, that's OK.
I would like to be able to make the left axis also independent of the bubble size, and optionally have a separate vertical axis for the bubble size (right axis, top axis?). allowing my left and bottom axis to determine bubble position, and a right (or top) axis to read the bubble size from.
I hope this clarifies the problem enough.
Regards - Hans
Vert: State
Horiz: Importance
Bubble size: value that represents the sum of assets (either money:bubbleA, or counts:bubbleB)
Importance and state cannot be negative values, and are somewhere between 0..100
The object value, however, can be quite large depending on the replacement value of the objects involved. (BubbleA)
Since the bubble size is projected on the Vert axis, the vert axis scales to -28K..28K, while actual bubble center values are only between 0..100. This makes it impossible to read the Y position of a bubble. The horiz appears to be independent of the bubble size, that's OK.
I would like to be able to make the left axis also independent of the bubble size, and optionally have a separate vertical axis for the bubble size (right axis, top axis?). allowing my left and bottom axis to determine bubble position, and a right (or top) axis to read the bubble size from.
I hope this clarifies the problem enough.
Regards - Hans
- Attachments
-
- TeeBubbles.zip
- (65.03 KiB) Downloaded 352 times
Re: Bubble chart axis
Hi Hans,
If I understood well, you have something like this and you would like to see clearer the difference in the YValue (center of the bubbles):
I don't know how you would like to notate the "little" differences in the YValue (center) showing at the same time the differences in the "big" radius.
If you have centers from -5 to 5, for example, and radius from -28000 to 28000, I understand as an expected behaviour that the differences in the centers won't be noticeable.
What you could do, for example, is to change the radius, dividing them by 10000 so that the differences in the centers will be comparable to the radius values.
But then the axis scale won't represent the radius values correctly. And to work around it, you could use the marks, for example:
If I understood well, you have something like this and you would like to see clearer the difference in the YValue (center of the bubbles):
Code: Select all
uses Series, BubbleCh;
procedure TForm1.FormCreate(Sender: TObject);
var i: Integer;
Series1: TBubbleSeries;
begin
Chart1.View3D:=false;
Series1:=Chart1.AddSeries(TBubbleSeries) as TBubbleSeries;
for i:=0 to 10 do
Series1.AddBubble(i, Random(10)-5, random(28000), '', clBlue);
end;
If you have centers from -5 to 5, for example, and radius from -28000 to 28000, I understand as an expected behaviour that the differences in the centers won't be noticeable.
What you could do, for example, is to change the radius, dividing them by 10000 so that the differences in the centers will be comparable to the radius values.
But then the axis scale won't represent the radius values correctly. And to work around it, you could use the marks, for example:
Code: Select all
procedure Series1GetMarkText(Sender: TChartSeries; ValueIndex: Integer; var MarkText: string);
//...
uses BubbleCh;
procedure TForm1.FormCreate(Sender: TObject);
var i: Integer;
Series1: TBubbleSeries;
ChartTool1: TMarksTipTool;
begin
Chart1.View3D:=false;
Series1:=Chart1.AddSeries(TBubbleSeries) as TBubbleSeries;
for i:=0 to 10 do
Series1.AddBubble(i, Random(10)-5, random(28000), '', clBlue);
//modifications
for i:=0 to Series1.Count-1 do
begin
Series1.Labels[i]:=FormatFloat('#.##0,###', Series1.RadiusValues[i]);
Series1.RadiusValues[i]:=Series1.RadiusValues[i]/10000;
end;
Series1.OnGetMarkText:=Series1GetMarkText;
ChartTool1:=Chart1.Tools.Add(TMarksTipTool) as TMarksTipTool;
end;
procedure TForm1.Series1GetMarkText(Sender: TChartSeries; ValueIndex: Integer; var MarkText: string);
var series: TBubbleSeries;
begin
if Sender is TBubbleSeries then
begin
series:=Sender as TBubbleSeries;
MarkText:='X: ' + FloatToStr(series.XValue[ValueIndex]) + #13 + 'Y: ' + FloatToStr(series.YValue[ValueIndex]) + #13 + 'Radius: ' + (series.Labels[ValueIndex]);
end;
end;
Best Regards,
Yeray Alonso Development & Support Steema Software Av. Montilivi 33, 17003 Girona, Catalonia (SP) | |
Please read our Bug Fixing Policy |
-
- Newbie
- Posts: 32
- Joined: Tue Jul 21, 2009 12:00 am
- Location: Nijmegen, Netherlands
Re: Bubble chart axis
Indeed, I could make the bubbels smaller by scaling down my values. The downside is that when exporting data, the data would need to be scaled back in order to export the data that I wanted to displayh in the first place
The thing is the bubble diagram is used as a kind of 3 dimensional display. (I use TTowerseries to display the same data es well)
Therefore I'd like an (optional) 3rd axis for the bubble diameter, making sure the Y position axis is independent of the bubble diameter.
Hint: You may consider this as a feature request. I am already creating a solution based on the scaling of the bubbles using a factor, or log10. But even in that case I'd want my diameter data to be independent of the (X,Y) position of the bubbles.
Regards - Hans
The thing is the bubble diagram is used as a kind of 3 dimensional display. (I use TTowerseries to display the same data es well)
Therefore I'd like an (optional) 3rd axis for the bubble diameter, making sure the Y position axis is independent of the bubble diameter.
Hint: You may consider this as a feature request. I am already creating a solution based on the scaling of the bubbles using a factor, or log10. But even in that case I'd want my diameter data to be independent of the (X,Y) position of the bubbles.
Regards - Hans
Re: Bubble chart axis
Hi Hans,
And what about using TPoint3DSeries or TBubble3DSeries and activating the Depth Right axis? Then you could use the Z instead of the Radius. I think it would become like follows:
YValues: State
XValues: Importance
ZValues: value that represents the sum of assets
And what about using TPoint3DSeries or TBubble3DSeries and activating the Depth Right axis? Then you could use the Z instead of the Radius. I think it would become like follows:
YValues: State
XValues: Importance
ZValues: value that represents the sum of assets
Best Regards,
Yeray Alonso Development & Support Steema Software Av. Montilivi 33, 17003 Girona, Catalonia (SP) | |
Please read our Bug Fixing Policy |
-
- Newbie
- Posts: 32
- Joined: Tue Jul 21, 2009 12:00 am
- Location: Nijmegen, Netherlands
Re: Bubble chart axis
Hi Yeray
I've made some adjustments to BubbleCH.pas I'd like to share with you. You may consider takem them into a next release. The changes implement a 'RadiusScaleFactor' which allows (display) scaling of the bubbles whilst still keeping the original radius values. My 1st choice would be to have a separate axis for the bubble radius, but I can live with thios solution too.
I can send you the changed BubbleCH.pas if you want to. I guessed you dont want me do drop the entire source code here
Regards - Hans
I've made some adjustments to BubbleCH.pas I'd like to share with you. You may consider takem them into a next release. The changes implement a 'RadiusScaleFactor' which allows (display) scaling of the bubbles whilst still keeping the original radius values. My 1st choice would be to have a separate axis for the bubble radius, but I can live with thios solution too.
Code: Select all
// changes to the class TBubbleSeries
private
{$ifdef HH_PATCH_TC_BUBBLE}
FRadiusScaleFactor : double;
{$endif}
protected
{$ifdef HH_PATCH_TC_BUBBLE}
procedure SetRadiusScaleFactor(aFactor:double);
function HasRadiusScaleFactor:boolean;
{$endif}
published
{$ifdef HH_PATCH_TC_BUBBLE}
property RadiusScaleFactor:double read FRadiusScaleFactor write SetRadiusScaleFactor stored HasRadiusScaleFactor;
{$endif}
// changes made to implementation
constructor
{$ifdef HH_PATCH_TC_BUBBLE}
FRadiusScaleFactor :=1.0;
{$endif}
Procedure TBubbleSeries.PreparePointer(ValueIndex:Integer);
var tmpSize : Integer;
begin
{$ifdef HH_PATCH_TC_BUBBLE}
tmpSize:=GetVertAxis.CalcSizeValue(RadiusValues.Value[ValueIndex]*RadiusScaleFactor);
{$else}
tmpSize:=GetVertAxis.CalcSizeValue(RadiusValues.Value[ValueIndex]);
{$endif}
...
// applyradius
if Increment then
result:=Math.Max(result,AList.Value[t]+RadiusValues.Value[t]{$ifdef HH_PATCH_TC_BUBBLE}*RadiusScaleFactor{$endif})
else
result:=Math.Min(result,AList.Value[t]-RadiusValues.Value[t]{$ifdef HH_PATCH_TC_BUBBLE}*RadiusScaleFactor{$endif});
// Assign
{$ifdef HH_PATCH_TC_BUBBLE}
if Source is TBubbleSeries then
FRadiusScaleFactor:=TBubbleSeries(Source).FRadiusScaleFactor;
{$endif}
// 2 new routines
{$ifdef HH_PATCH_TC_BUBBLE}
procedure TBubbleSeries.SetRadiusScaleFactor(aFactor:double);
begin
if FRadiusScaleFactor<>aFactor then
begin
if aFactor<=0 then
raise ChartException.CreateFmt('%s.SetRadiusScaleFactor(%n) in valid value',[ClassName,aFactor])
else
begin
FRadiusScaleFactor:=aFactor;
Repaint;
end;
end;
end;
function TBubbleSeries.HasRadiusScaleFactor:boolean;
begin
Result:=FRadiusScaleFactor<>1.0;
end;
{$endif}
Regards - Hans
Re: Bubble chart axis
Hi Hans,
Thanks for your suggestions!
I've added it to the wish list to be revised asap (TV52015115).
Thanks for your suggestions!
I've added it to the wish list to be revised asap (TV52015115).
Best Regards,
Yeray Alonso Development & Support Steema Software Av. Montilivi 33, 17003 Girona, Catalonia (SP) | |
Please read our Bug Fixing Policy |