Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Gráficos (https://www.clubdelphi.com/foros/forumdisplay.php?f=8)
-   -   Tchart Valores String en los ejes X o Y (https://www.clubdelphi.com/foros/showthread.php?t=87224)

lpedrazzi 01-12-2014 17:13:06

Tchart Valores String en los ejes X o Y
 
Buenos dias estimados, estoy realizando un simple grafico de barras con los resultados de una query, el problema que se me presenta es que no se como puedo poner valores tipo string en el eje "y" por ejemplo los nombres de los meses, ya que la funcion AddXY solo me toma valores de tipo double o integer, desde ya agradezco cualquier orientacion que me puedan brindar, saludos cordiales.-
Código Delphi [-]
  for x:=0 to chart1.SeriesCount-1 do Chart1.Series[x].Clear;
  i:=0;
  while not Query1.Eof  do begin
  inc(i);
    With Chart1.Series[0] Do Begin
      AddXY(i, Query1.FieldByName('cantidad').AsInteger, '', clTeeColor);
    End;
    With Chart1.Series[1] Do Begin
      AddXY(i, Query1.FieldByName('cantidad').AsInteger, '', clTeeColor);
    End;

    Query1.Next;
  end;

nlsgarcia 15-12-2014 04:45:13

lpedrazzi,

Cita:

Empezado por lpedrazzi
...estoy realizando un simple gráfico de barras con los resultados de una query, el problema que se me presenta es que no se como puedo poner valores tipo string en el eje "y" por ejemplo los nombres de los meses...

Los valores tipo String solo se pueden colocar en el eje X, el eje Y requiere de valores numéricos para poder graficar :rolleyes:

Revisa este código:
Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons, ExtCtrls, TeeProcs, TeEngine, Chart, DB, DBClient,
  Series;

type
  TForm1 = class(TForm)
    Chart1: TChart;
    BitBtn1: TBitBtn;
    BitBtn2: TBitBtn;
    Series1: TBarSeries;
    procedure BitBtn2Click(Sender: TObject);
    procedure BitBtn1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

const
  GColor : Array[1..12] of TColor = (clGreen, clOlive, clNavy, clPurple, clTeal,
                                     clGray, clSilver, clRed, clLime, clYellow,
                                     clBlue, clFuchsia);

var
  Form1: TForm1;
  Table : TClientDataset;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
   Randomize;
end;

procedure TForm1.BitBtn1Click(Sender: TObject);
var
   i : Integer;

begin

   if Assigned(Table) then FreeAndNil(Table);

   Table := TClientDataset.Create(Application);
   Table.FieldDefs.Add('CodProd', ftString, 10, False);
   Table.FieldDefs.Add('Cantidad', ftInteger,0, False);
   Table.FieldDefs.Add('Date', ftDate, 0, False);
   Table.FieldDefs.Add('Status', ftBoolean, 0, False);
   Table.CreateDataset;
   Table.Open;

   for i := 1 to 12 do
   begin
      Table.Append;
      Table.FieldByName('CodProd').AsString := Format('PRD%.3d',[i]);
      Table.FieldByName('Cantidad').AsInteger := Random(1000);
      Table.FieldByName('Date').AsDateTime := Now;
      Table.FieldByName('Status').AsBoolean := True;
      Table.Post;
   end;

   Table.Close;

end;

procedure TForm1.BitBtn2Click(Sender: TObject);
var
   CodProd : String;
   Cantidad : Integer;
   i : Integer;

begin

   if Assigned(Table) then
   begin

      i := 1;

      with Chart1 do
      begin
         Title.Text.Clear;
         Title.Text.Add('Gráfico de Productos vs Cantidad');
         Legend.Visible := False;
         LeftAxis.Title.Caption := 'Cantidad';
         LeftAxis.Title.Font.Color := clBlue;
         BottomAxis.Title.Caption := 'Productos';
         BottomAxis.Title.Font.Color := clBlue;
      end;

      with Series1 do
      begin

         Clear;

         Marks.Style := smsPercent;

         with Table do
         begin
            Open;
            while not eof do
            begin
               CodProd := Table.FieldByName('CodProd').AsString;
               Cantidad := Table.FieldByName('Cantidad').AsInteger;
               Add(Cantidad, CodProd, GColor[i]);
               inc(i);
               Next;
            end;
            Close;
         end;

      end;

   end;

end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
   FreeAndNil(Table);
   Action := caFree;
end;

end.
El código anterior en Delphi 7 sobre Windows 7 Professional x32, crea una tabla en memoria y su gráfico de barras asociado, como se puede ver en la siguiente imagen:



Espero sea útil :)

Nelson.


La franja horaria es GMT +2. Ahora son las 18:33:56.

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