Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 10-03-2012
guitarrahugo guitarrahugo is offline
Miembro
NULL
 
Registrado: ene 2012
Posts: 15
Poder: 0
guitarrahugo Va por buen camino
Problemas con tchart

Hola amigos, me surgió el siguiente problema. Estoy ingresando resultados de análisis por fecha y los muestro en un tchart. Lo cierto, es que cuando yo voy ingresando los valores para un mes los puntos los grafica perfectos Ejemplo: ingreso el valor para el 01-02-2012 y luego el valor para el 22-02-2012, estos se grafican primero 01 y después el 22. Ahora bien, el problema está cuando cambio el mes, ingreso el 02-03 y lo que hace es grafica primero el 01-02 luego 02-03 y por último el 22-02. Yo necesito que siga el orden de las fechas primero 01-02 luego 22-02 y por ultimo 02-03. Bueno espero haber sido claro, desde ya agradezco su dedicación y paciencia.
Responder Con Cita
  #2  
Antiguo 10-03-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola Hugo.

Sin ver el código es difícil saber que esta pasando, deberías poner al menos la parte donde ingresas los datos.

De todos modos hice un pequeño ejemplo que carga valores aleatorios por mes (días aleatorios) y los datos aparecen en el órden en que son ingresados:
Código Delphi [-]
...
var
  i,x: Byte;
  d,m: string;
begin
  Series1.Clear;
  Randomize;
  for i:= 1 to 12 do
  begin
    x:= Random(31)+1;
    d:= StringOfChar('0', 2-Length(IntToStr(x))) + IntToStr(x);
    m:= StringOfChar('0', 2-Length(IntToStr(i))) + IntToStr(i);
    Series1.Add(Random(100), d + '/' + m + '/2012');
  end;
end;

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #3  
Antiguo 10-03-2012
guitarrahugo guitarrahugo is offline
Miembro
NULL
 
Registrado: ene 2012
Posts: 15
Poder: 0
guitarrahugo Va por buen camino
Hola gracias por tu respuesta y por tu tiempo. Este es el código que carga los resultados y sus respectivas fechas de la base de datos. El tema es que me los ordena mal, y no me doy cuenta porque.
Código Delphi [-]
       
      for I := 1 to NumeroResultados  do
             begin
                    nomen.RecordSetIndex:= i; 
                    y := StrToFloat(StringReplace(Nomen.field['RESULTADO'], '.',',',[rfReplaceAll])); 
                    x := StrToFloat(copy( (Nomen.field['fecha']),1,5));
                    titulo:= copy( (Nomen.field['fecha']),1,5);

                   if strToInt(Nomen.field['ANULADO'])= 1 then
                    begin
                          Series5.AddBubble(x,y,0.2,titulo); //grafica punto anulado
                          PuntoAnulado := PuntoAnulado + 1
                    end
                    else begin
                          Series1.AddBubble(x,y,0.2,titulo);
                          CantResultados := CantResultados + 1;
                          SumaResultados :=  SumaResultados + StrToFloat(StringReplace(Nomen.field['RESULTADO'], '.',',',[rfReplaceAll]));
                          ValordeAnalisis[i]:= StrToFloat(StringReplace(Nomen.field['RESULTADO'], '.',',',[rfReplaceAll]));
                     end;

             
                  if GraficaHasta < StrToInt(copy( (Nomen.field['fecha']),1,2)) + 2 then
                     GraficaHasta := StrToInt(copy( (Nomen.field['fecha']),1,2)) + 2;

              end;
Responder Con Cita
  #4  
Antiguo 11-03-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola Hugo.

Estuve revisando tu código y tengo bastantes dificultades con él por tener versiones más antiguas, hay métodos y propiedades que no dispongo para poder evaluarlo.

De todos modos, tengo baches para entender la lógica de muchas partes del código. Quizá ayudaría que nos comentaras que campos y de que tipo hay tu DataSet, así como también cuales, en que formato y bajo que condiciones queres mostrarlos en el TChart.

Un saludo.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #5  
Antiguo 11-03-2012
guitarrahugo guitarrahugo is offline
Miembro
NULL
 
Registrado: ene 2012
Posts: 15
Poder: 0
guitarrahugo Va por buen camino
Hola ecfisa gracias por tu respuesta.
Los campos que tengo que mostrar son básicamente dos. Resultados, que es de tipo float y fecha que es de tipo string (este lo fuerzo a float o int después por que es el tipo de datos que espera la serie para poder graficar el eje x). Con respecto al formato, seria sobre el eje Y voy a mostrar los valores del resultado ejemplo: 2.6 y en el eje X los días ejemplo: 01-03. Ahí debería graficar el punto.
Pero esto no es el problema, sino es que los ordena mal, no respeta los meses. Junta 01-01 con 03-02 y luego grafica 22-01. Probé ver si en las propiedades del grafico había algún orden automático que estuviera molestando, pero no veo nada fuera de lo común.
Intente también subirles una imagen del grafico para que lo puedan ver, pero no me deja, dice que aun no tengo permisos para subir imágenes ni link en el foro.
Espero ser claro, y desde ya agradezco la intención de ustedes en ayudarme y su tiempo. Gracias.
Responder Con Cita
  #6  
Antiguo 11-03-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola Hugo.

De acuerdo a lo que pude entender, te hice un ejemplo muy reducido considerando sólamente el aspecto fecha/resultado. En el mismo supongo el formato de la fecha almacenada como 'dd/mm/yyyy', ej: '01/01/2012'. Esto último es esencial al momento de elegir como extraer el día, mes o año con la función Copy.

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
  x, y: Double;
  AXLabel: string;
begin
  with DataSet do
  begin
    First;
    while not Eof do
    begin
      x:= StrToFloat(Copy(FieldByName('FECHA').AsString, 4, 2)+  // mes (--/mm/----)
                     Copy(FieldByName('FECHA').AsString,1,2));   // día (dd/--/----)
      y:= FieldByName('RESULTADO').AsFloat;
      if FieldByName('ANULADO').AsInteger = 1 then
        Series2.AddBubble(x, y, 1, Copy(FieldByName('FECHA').AsString,1,5), clRed)  // se muestra: dd/mm
      else
        Series1.AddBubble(x, y, 1, Copy(FieldByName('FECHA').AsString,1,5), clLime); // se muestra: dd/mm
      Next;
    end;
  end;
end;
El quid para ordenar las fechas almacenadas como cadena, es invertirla como hago arriba en la obtención del valor de x. De otro modo y ejemplificando, la fecha '31/03/2000' es mayor que '01/01/2144'... Espero te sea de ayuda.

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 11-03-2012 a las 22:16:30. Razón: corregir comentario
Responder Con Cita
  #7  
Antiguo 11-03-2012
guitarrahugo guitarrahugo is offline
Miembro
NULL
 
Registrado: ene 2012
Posts: 15
Poder: 0
guitarrahugo Va por buen camino
Bien, funciono de maravilla. Muchas gracias. Había que invertir el día por le mes. Ahora lo ordena perfecto.
Aprovecho para preguntarte otra cosa sin abusar de tu buena voluntad.
Al mezclar fechas de 2 meses distintos ejemplo desde 22-02 hasta el 09-03 me agrupa del 22-02 hasta el 28-02 a la izquierda del grafico todo apretado y 01-03 hasta 09-03 a la derecha del grafico todo apretado, como que del 28 al 01 tendría que contar hasta el 99 para volver a empezar del 1 otra vez o algo así. La pregunta es ¿existe la posibilidad de decirle que llegado el numero 31 empiece a contar de 1 en el eje X?. De esta manera el punto del 28-02 quedaría al lado del punto del 01-03.
Responder Con Cita
  #8  
Antiguo 13-03-2012
guitarrahugo guitarrahugo is offline
Miembro
NULL
 
Registrado: ene 2012
Posts: 15
Poder: 0
guitarrahugo Va por buen camino
Smile

Tema solucionado, lo que había que hacer era convertir en date el eje X, de esta manera llega hasta el día 31 y agrupa de manera inmediata el día 1. Gracias por tu ayuda. Como dije antes, una vez más tema solucionado gracias al foro.Asi quedó el código.

Código Delphi [-]
             for I := 1 to NumeroResultados  do
             begin
                    nomen.RecordSetIndex:= i; 
                    y := StrToFloat(StringReplace(Nomen.field['RESULTADO'], '.',',',[rfReplaceAll])); 
                    x := StrTodate(copy( (Nomen.field['fecha']),1,2)+'/'+ copy( (Nomen.field['fecha']),4,2));
                    titulo:= copy( (Nomen.field['fecha']),1,5);
                    if strToInt(Nomen.field['ANULADO'])= 1 then
                    begin
                          Series5.AddBubble(x,y,0.2,titulo,clRed); //grafica punto anulado
                          PuntoAnulado := PuntoAnulado + 1
                    end
                    else begin
                          Series1.AddBubble(x,y,0.2,titulo);
                          CantResultados := CantResultados + 1;
                          SumaResultados :=  SumaResultados + StrToFloat(StringReplace(Nomen.field['RESULTADO'], '.',',',[rfReplaceAll]));
                          ValordeAnalisis[i]:= StrToFloat(StringReplace(Nomen.field['RESULTADO'], '.',',',[rfReplaceAll]));
                     end;

                  //Le digo que trace la media a partir de la fecha mas alta que encontro entoces va a ir de 0 a 31 x ejemplo
                  if GraficaHasta < StrToInt(copy( (Nomen.field['fecha']),1,2)) then//+ copy( (Nomen.field['fecha']),1,2))+2 then
                   GraficaHasta := StrToInt(copy( (Nomen.field['fecha']),1,2)) + 2;

              end;
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
ayuda con un tchart efirvida Varios 4 05-04-2012 09:56:05
Previsualizar un TChart hmrvivas Impresión 2 03-05-2010 23:00:14
Tchart marlulipe Gráficos 2 15-08-2007 01:32:04
TChart con problemas en los primeros puntos ANDRES86 OOP 0 14-04-2007 03:02:04
Ayuda con TChart pelaorb68 Gráficos 0 02-09-2006 00:41:02


La franja horaria es GMT +2. Ahora son las 15:24:37.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi