Hi Mark, I agree with your view that a "PlotViewer" is missing. We have all the tools in the GUI to create a nice viewer. However, these tools are only available now on Unix and I am hesitating to implement something that will be available on Unix systems only. We desperately try to find a solution to get the GUI ported on NT. This item was discussed at the Root workshop. It is a top priority, otherwise we will diverge between Unix and NT and the system will become unmaintainable. Looking at your macro, you seem to ignore the TStyle class. I have simplified your macro using TStyle. See the new version below: Rene Brun //macro to plot 30,60 and 90deg missing energy spectra { gROOT->Reset(); //set some standard pad parameters via TStyle gStyle->SetPadLeftMargin(0.25); gStyle->SetTitleH(0.06); gStyle->SetTitleW(0.5); gStyle->SetNdivisions(505,"X"); gStyle->SetLabelSize(0.08,"X"); gStyle->SetLabelOffset(-0.04,"X"); gStyle->SetTitleSize(0.08,"X"); gStyle->SetTitleOffset(0.5,"X"); gStyle->SetLabelSize(0.08,"Y"); gStyle->SetLabelOffset(0.02,"Y"); gStyle->SetTitleSize(0.08,"Y"); gStyle->SetTitleOffset(1.2,"Y"); gStyle->SetOptStat(0); TCanvas *canvas = new TCanvas("canvas","Missing Energy 30,60,90",1); canvas->Divide(3,1); TH1F *hemissfg30 = new TH1F("hemissfg30","random 30",50,0,5); TH1F *hemissfg60 = new TH1F("hemissfg60","random 60",50,0,5); TH1F *hemissfg90 = new TH1F("hemissfg90","random 90",50,0,5); hemissfg30->FillRandom("gaus",1000); hemissfg60->FillRandom("gaus",1000); hemissfg90->FillRandom("gaus",1000); hemissfg30->SetXTitle("Missing Energy (MeV)"); hemissfg60->SetXTitle("Missing Energy (MeV)"); hemissfg90->SetXTitle("Missing Energy (MeV)"); hemissfg30->SetYTitle("Counts"); hemissfg60->SetYTitle("Counts"); hemissfg90->SetYTitle("Counts"); //now draw on the divided canvas TLine line; line.SetLineStyle(2); canvas->cd(1); hemissfg30->Draw(); line.DrawLine(0,20,5,20); canvas->cd(2); hemissfg60->Draw(); line.DrawLine(0,20,5,20); canvas->cd(3); hemissfg90->Draw(); line.DrawLine(0,20,5,20); //------------end drawing on canvas } Mark James Boland wrote: > > Hi ROOT users, > > I am plotting histograms using a macro and have found the ways of setting > attributes varied and inconsistent (naturally this could lie in the way I > think about ROOT). Since this is such a fundamental part of using ROOT > (displaying the results of ones physics analysis) maybe there need to be > an easy way to simply plot things. Judging from the kinds of questions on > this dicussion list I think other people might find something like that > useful too. I am thinking here of an analagous tool to the TBrowser or > TTreeViewer, a "one stop" GUI to set the layout of the canvas, axis titles > etc. I don't have the C++/GUI programing skills to implement this myself > but maybe someone is interested. I guess this issue relates to the > philosophy of "Get ROOT working first, idiot proof later". > > As an "idiot" I find ROOT very good for analysing my data but spent all > day today chasing inheritances and member functions just to display three > plots with legible axis and titles. Titles are set one way, labels > another, Rebin() resets all the X-axis properties and not the Y so the > order in which you SetXXX() things is important etc. This leads me, after > a long preamble to my real questions: > > In the following macro I set the Y-axis title to "Counts" and also set the > size and the offset of the title. The values I use move the "Counts" title > off the left edge of the pad and so I have to manually grab the TFrame > with the mouse pointer and move it to the right for all three plot for the > title to appear. > > 1. Is there a way to automate this resizing of the TFrame based on NDC or > pad size or whatever? > 2. How can you set the size of the text in the TH1F title in the TPaveText > object that appears above the histogram using a macro? > > (sorry for the length of this example) > > //macro to plot 30,60 and 90deg missing energy spectra > { > gROOT->Reset(); > > TCanvas *canvas = new TCanvas("canvas","Missing Energy 30,60,90",1); > canvas->Divide(3,1); > > TH1F *hemissfg30 = new TH1F("hemissfg30","random 30",100,-10,10); > TH1F *hemissfg60 = new TH1F("hemissfg60","random 60",100,-10,10); > TH1F *hemissfg90 = new TH1F("hemissfg90","random 90",100,-10,10); > > hemissfg30->FillRandom("gaus",1000); > hemissfg60->FillRandom("gaus",1000); > hemissfg90->FillRandom("gaus",1000); > > //must rebin first otherwise axis is reset and all SetXXXX are undone!!! > hemissfg30->Rebin(2); > hemissfg60->Rebin(2); > hemissfg90->Rebin(2); > > //Set axes properties > TAxis *Xaxis30 = hemissfg30->GetXaxis(); > TAxis *Xaxis60 = hemissfg60->GetXaxis(); > TAxis *Xaxis90 = hemissfg90->GetXaxis(); > > Xaxis30->SetLabelSize(0.08); > Xaxis60->SetLabelSize(0.08); > Xaxis90->SetLabelSize(0.08); > > Xaxis30->SetLabelOffset(-0.04); > Xaxis60->SetLabelOffset(-0.04); > Xaxis90->SetLabelOffset(-0.04); > > Xaxis30->SetTitleSize(0.08); > Xaxis60->SetTitleSize(0.08); > Xaxis90->SetTitleSize(0.08); > > Xaxis30->SetTitleOffset(0.5); > Xaxis60->SetTitleOffset(0.5); > Xaxis90->SetTitleOffset(0.5); > > TAxis *Yaxis30 = hemissfg30->GetYaxis(); > TAxis *Yaxis60 = hemissfg60->GetYaxis(); > TAxis *Yaxis90 = hemissfg90->GetYaxis(); > > Yaxis30->SetLabelSize(0.08); > Yaxis60->SetLabelSize(0.08); > Yaxis90->SetLabelSize(0.08); > > Yaxis30->SetLabelOffset(0.02); > Yaxis60->SetLabelOffset(0.02); > Yaxis90->SetLabelOffset(0.02); > > Yaxis30->SetTitleSize(0.08); > Yaxis60->SetTitleSize(0.08); > Yaxis90->SetTitleSize(0.08); > > Yaxis30->SetTitleOffset(1.2); > Yaxis60->SetTitleOffset(1.2); > Yaxis90->SetTitleOffset(1.2); > > //now set all the properties of the histograms > hemissfg30->SetStats(0); > hemissfg60->SetStats(0); > hemissfg90->SetStats(0); > > hemissfg30->SetAxisRange(0,5); > hemissfg60->SetAxisRange(0,5); > hemissfg90->SetAxisRange(0,5); > > hemissfg30->SetXTitle("Missing Energy (MeV)"); > hemissfg60->SetXTitle("Missing Energy (MeV)"); > hemissfg90->SetXTitle("Missing Energy (MeV)"); > > hemissfg30->SetYTitle("Counts"); > hemissfg60->SetYTitle("Counts"); > hemissfg90->SetYTitle("Counts"); > //----------------end of properties-------- > > //create a zero line for each histo > TLine *line30 = new TLine(0,20,5,20); > TLine *line60 = new TLine(0,20,5,20); > TLine *line90 = new TLine(0,20,5,20); > > line30->SetLineStyle(2); > line60->SetLineStyle(2); > line90->SetLineStyle(2); > > line30->SetLineWidth(1); > line60->SetLineWidth(1); > line90->SetLineWidth(1); > //-----------end line stuff > > //now draw on the divided canvas > canvas->cd(1); > hemissfg30->Draw(); > line30->Draw(); > > canvas->cd(2); > hemissfg60->Draw(); > line60->Draw(); > > canvas->cd(3); > hemissfg90->Draw(); > line90->Draw(); > //------------end drawing on canvas > } > //EOF > > Thanks in advance and keep up the good ROOT development work. > > Regards, > Mark > > ___________________________________________________________________ > Mark Boland markjb@physics.unimelb.edu.au > School of Physics PhD Student > The University of Melbourne Photonuclear Group > Fax: +61 3 9347 4783 Ph: +61 3 8344 5426
This archive was generated by hypermail 2b29 : Tue Jan 02 2001 - 11:50:19 MET