Page 1 of 1
GRAFICO DE BURBUJAS
Posted: Wed Jan 12, 2011 11:56 am
by 16457872
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.
Re: GRAFICO DE BURBUJAS
Posted: Wed Jan 12, 2011 2:57 pm
by narcis
Hi Esquivias,
Doing something like what you reported in Excel in the attached spreadsheet I get this:
- BubblesExcel.jpg (145.19 KiB) Viewed 3950 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?
Re: GRAFICO DE BURBUJAS
Posted: Wed Jan 12, 2011 5:49 pm
by 16457872
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.
Re: GRAFICO DE BURBUJAS
Posted: Thu Jan 13, 2011 8:20 am
by narcis
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?
Re: GRAFICO DE BURBUJAS
Posted: Fri Jan 14, 2011 10:23 am
by narcis
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 (88.02 KiB) Viewed 3889 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 (72.66 KiB) Viewed 3892 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.