Re: [ROOT] Time Graphs.

From: Eddy Offermann (eddy@rentec.com)
Date: Thu May 18 2000 - 21:37:10 MEST


Hi Gagik,

If I understand you correctly you would like to plot something like
a time series. Here is a simple macro that can accomplish this.
I am using a class "TSDate" to calculate business dates, replace it
with your own times:
{
  TCanvas *c1 = new TCanvas("c1","A Simple Graph",200,10,700,500);
  c1->SetGridx();
  c1->SetGridy();

  Float_t x[20],y[20];
  Char_t  *daystr[20];
  TSDate  day;

//-- make data
  Int_t n = 20;
  TSDate sday("1/1/99");
  Long_t sbusday = sday.GetDateNr();
  for (Int_t i=0;i<n;i++)
  {
    day.SetDate(sbusday+i);
    x[i] = day.GetDateNr();
    y[i] = TMath::Sin((x[i]-sbusday)/n*2*TMath::Pi());
  }

//--- code needed to get date strings for the x labels
  Int_t nrDivisions = 5;
  Float_t xmin = x[0]-1.0;
  Float_t xmax = x[n-1]+1.0;
  Float_t ymin = -1.5;
  Float_t ymax = 1.5;
  TH1F *frame = new TH1F("frame","bla bla",2,xmin,xmax);
  {
    frame->SetMinimum(ymin);
    frame->SetMaximum(ymax);
    frame->SetLabelOffset(10);
    frame->SetLabelSize(0.0);
    frame->SetNdivisions(-nrDivisions);
    frame->SetTitleOffset(1.1,"X");
    frame->SetXTitle("time");
    frame->SetTitleOffset(1.1,"Y");
    frame->SetYTitle("who knows");
    frame->Draw();
  }

  TText *t = new TText();
  {
    t->SetTextAlign(22);
    t->SetTextSize(0.030);
  }

  Float_t timeSpan = xmax-xmin;
  Float_t step     = Float_t(timeSpan/nrDivisions);
  Float_t dist     = TMath::Abs(ymax-ymin);

  for (Int_t j=0; j<nrDivisions+1;j++)
  {
    Float_t xpos = xmin+j*step;
    Float_t ypos = ymin-0.05*dist;
    day.SetDate(xpos);
    t->DrawText(xpos,ypos,day.GetDateString());
  }

//-- Finally plot the graph

  gr = new TGraph(n,x,y);
  gr->SetMarkerStyle(20);
  gr->SetMarkerSize(1.0);
  gr->SetMarkerColor(kRed);
  gr->SetLineWidth(1.0);
  gr->Draw("LP");

}

Eddy
Renaissance Technologies Corp.



This archive was generated by hypermail 2b29 : Tue Jan 02 2001 - 11:50:25 MET