GRAFICO DE BURBUJAS

TeeChart VCL for Borland/CodeGear/Embarcadero RAD Studio, Delphi and C++ Builder.
Post Reply
ESQUIVIAS
Newbie
Newbie
Posts: 2
Joined: Wed Nov 17, 2010 12:00 am

GRAFICO DE BURBUJAS

Post by ESQUIVIAS » Wed Jan 12, 2011 11:56 am

tengo los siguientes valores de gráfico. Eje X: de 0 a 18 (valoración). Eje Y: de 0 a 1200 (importe). En excel cargo los 3 parámestros para el gráfico de burbuja: 1º parámetro (valoración). 2º parámetro (importe) 3º parámetro (radio: valoración * importe). Por ejemplo: valoración: 7, importe: 1000, radio: 7000. La burbuja en el gráfico sale perfectamente proporcionada al valor del parámetro radio.
En el componente TChart, si grabo los 3 parámetros con los mismos valores que en excel, el eje x sale bién, el eje y sale bién, pero la burbuja sale gigante.
¿cómo he de grabar en TChart el valor del 3º parámetro (Radius) para que siempre sea proporcional el tamaño de la burbuja sobre los ejes x e y.
Gracias.

Narcís
Site Admin
Site Admin
Posts: 14730
Joined: Mon Jun 09, 2003 4:00 am
Location: Banyoles, Catalonia
Contact:

Re: GRAFICO DE BURBUJAS

Post by Narcís » Wed Jan 12, 2011 2:57 pm

Hi Esquivias,

Doing something like what you reported in Excel in the attached spreadsheet I get this:
BubblesExcel.jpg
BubblesExcel.jpg (145.19 KiB) Viewed 3947 times
Is this similar to what you get?

As far as I can see here. Excel lets you choose whether the 3rd parameter should define bubbles radius or area. It seems that by default it's area. TeeChart only admits using radius but you can easily calculate it from a circle area, for example:

Code: Select all

uses BubbleCh;

procedure TForm1.FormCreate(Sender: TObject);
var
  Series1 : TBubbleSeries;
  i       : Integer;
  x       : Double;
  y       : Double;
  area    : Double;
  radius  : Double;
begin
  Chart1.View3D:=False;

  Series1:=TBubbleSeries.Create(Self);
  Chart1.AddSeries(Series1);

  for i := 0 to 18 do
  begin
    x:=i;
    y:=random(1200);
    area:=x*y;
    radius:=Sqrt(area/Pi);
    Series1.AddBubble(x, y, radius);
  end;
end;
Is that what you were looking for?
Attachments
Esquivias.zip
(8.6 KiB) Downloaded 274 times
Best Regards,
Narcís Calvet / Development & Support
Steema Software
Avinguda Montilivi 33, 17003 Girona, Catalonia
Tel: 34 972 218 797
http://www.steema.com
Image Image Image Image Image Image
Instructions - How to post in this forum

ESQUIVIAS
Newbie
Newbie
Posts: 2
Joined: Wed Nov 17, 2010 12:00 am

Re: GRAFICO DE BURBUJAS

Post by ESQUIVIAS » Wed Jan 12, 2011 5:49 pm

gracias por la rápida respuesta.
he seguido los pasos que me indicas y no sale bien.

te hago los siguientes comentarios:
EXCEL.
no varía las escalas "x" (12) e "y" (1200) independientemente del valor de la burbuja.
Ajusta el valor de la burbuja en la coordenada correspondiente dentro del valor de las escalas.

TCHART.
varía las escalas "x" e "y" según el valor de la burbuja.
es fundamental que el eje "y" no varíe porque la inversión que representa este eje nunca varía.

De esta forma en TChart no se puede hacer una comparativa de cómo varía la inversión de una entidad, a cómo varía la inversión de la entidad por la ponderación de días de colocación, p.ej.

te mando un fichero de excel como ejemplo.
la columna (valor de la burbuja) y gráfico naranja es la inversión de la entidad.
la columna (valor de la burbuja) y gráfico amarillo es la inversión de la entidad ponderada por los días de inversión.

saludos.
Attachments
error burbujas.jpg
error burbujas.jpg (144.12 KiB) Viewed 3927 times

Narcís
Site Admin
Site Admin
Posts: 14730
Joined: Mon Jun 09, 2003 4:00 am
Location: Banyoles, Catalonia
Contact:

Re: GRAFICO DE BURBUJAS

Post by Narcís » Thu Jan 13, 2011 8:20 am

Hola ESQUIVIAS,
TCHART.
varía las escalas "x" e "y" según el valor de la burbuja.
es fundamental que el eje "y" no varíe porque la inversión que representa este eje nunca varía.
Si entiendo bien el problema al que te refieres tiene una solución fácil. Consiste en fijar el mínimo y máximo de los ejes segun los valores mínimos y máximos que puedan tener las burbujas. En mi ejemplo anterior seria:

Code: Select all

  Chart1.Axes.Bottom.SetMinMax(0, 18);
  Chart1.Axes.Left.SetMinMax(0, 1200);
Es esto lo que andas buscando?
Best Regards,
Narcís Calvet / Development & Support
Steema Software
Avinguda Montilivi 33, 17003 Girona, Catalonia
Tel: 34 972 218 797
http://www.steema.com
Image Image Image Image Image Image
Instructions - How to post in this forum

Narcís
Site Admin
Site Admin
Posts: 14730
Joined: Mon Jun 09, 2003 4:00 am
Location: Banyoles, Catalonia
Contact:

Re: GRAFICO DE BURBUJAS

Post by Narcís » Fri Jan 14, 2011 10:23 am

Hola,

A raíz de la conversación telefónica que hemos tenido hace un rato, he trabajado un poquito en lo que hemos hablado y he modificado el código anterior para que utilizara exactamente los mismos datos que el fichero de Excel que adjunte:

Code: Select all

uses BubbleCh, TeeGDIPlus, TeeJPEG;

procedure TForm1.FormCreate(Sender: TObject);
Const NumBubbles = 19;
var
  Series1 : TBubbleSeries;
  i       : Integer;
  x       : Double;
  y       : Array of Double;
  area    : Double;
  radius  : Double;
  g       : TGDIPlusCanvas;

  procedure PopulateYValues;
  begin
    SetLength(y, NumBubbles);

    y[0]:=1119;
    y[1]:=1100;
    y[2]:=568;
    y[3]:=406;
    y[4]:=296;
    y[5]:=1056;
    y[6]:=1072;
    y[7]:=1027;
    y[8]:=840;
    y[9]:=897;
    y[10]:=809;
    y[11]:=1014;
    y[12]:=1095;
    y[13]:=27;
    y[14]:=497;
    y[15]:=29;
    y[16]:=936;
    y[17]:=651;
    y[18]:=335;
  end;

begin
  g:=TGDIPlusCanvas.Create;
  Chart1.Canvas:=g;
  Chart1.View3D:=False;

  Series1:=TBubbleSeries.Create(Self);
  Series1.ColorEachPoint:=False;
  Series1.Pointer.InflateMargins:=True;
  Series1.Pointer.Pen.Visible:=False;
  Chart1.AddSeries(Series1);
  PopulateYValues;

  for i := 0 to NumBubbles-1 do
  begin
    x:=i;
    area:=x*y[i];
    radius:=Sqrt(area/Pi);
    Series1.AddBubble(x, y[i], radius);
  end;

  {Chart1.Axes.Bottom.MinimumOffset:=50;
  Chart1.Axes.Bottom.MaximumOffset:=50;
  Chart1.Axes.Left.MinimumOffset:=50;
  Chart1.Axes.Left.MaximumOffset:=50;}

  //Chart1.Axes.Bottom.SetMinMax(-5, 25);
  //Chart1.Axes.Left.SetMinMax(-200, 1400);
end;
Lo que produce este gráfico:
BubblesTeeChart.jpg
BubblesTeeChart.jpg (88.02 KiB) Viewed 3886 times
Como es evidente, hay diferencias entre Excel y TeeChart aquí. Una de las principales es que Excel aplica un offset a sus ejes de forma automática. Algo parecido a MinimumOffset i MaximumOffset que está comentado en el código de arriba. Otra diferencia importante és el modo como se calcula la mida de las burbujas en Excel. No soy ningún experto en Excel, todo lo contrario, pero veo que hay 2 opciones para los valores de las burbujas: área y anchura. Siendo el primero el valor por defecto. Nosotros podríamos implementar una propiedad parecida: radio o área. Sin embargo, el modo como Excel calcula el área no es el mismo como el que implemente yo basándome en las fórmulas de geometría básicas. Tengo la impresión que Excel aplica algún factor corrector. Por ejemplo, multiplicando el radio proporcionado a las burbujas por 3 así:

Code: Select all

    Series1.AddBubble(x, y[i], radius * 3);
Resulta en el chart de abajo, bastante más parecido a lo que se obtiene en Excel.
BubblesTeeChartx3.jpg
BubblesTeeChartx3.jpg (72.66 KiB) Viewed 3889 times
Que te parecen las mejoras propuestas? Crees que estamos en el buen camino hacia el tipo de gráfico que esperas obtener? Tienes alguna otra sugerencia de como Excel crea sus gráficos que podríamos ayudarte a añadir al ejemplo anterior?

Gracias de antemano y buen fin de semana.
Best Regards,
Narcís Calvet / Development & Support
Steema Software
Avinguda Montilivi 33, 17003 Girona, Catalonia
Tel: 34 972 218 797
http://www.steema.com
Image Image Image Image Image Image
Instructions - How to post in this forum

Post Reply