void SetAspect( TPad *pad, double aspect ) { // Set aspect of pad // *pad = TPad pad to be altered // aspect = aspect ratio X:Y double xlo, ylo, xup, yup; double xmid, ymid, xwid, xwid2, ywid, ywid2; // Check for valid aspect ratio if( aspect <= 0. ) { printf("aspad: ERROR Invalid aspect ratio %lf\n",aspect); return; } // Get originial pad coordinates pad->GetPadPar( xlo, ylo, xup, yup ); xwid = (xup - xlo)/2.; ywid = (yup - ylo)/2.; xmid = (xlo + xup)/2.; ymid = (ylo + yup)/2.; // Set pad to size of smaller width, being careful not to overstep bounds if( xwid < ywid ) { xwid2 = xwid; ywid2 = aspect/xwid2; if( ywid2 > ywid ) { ywid2 = ywid; xwid2 = ywid2*aspect; } } else { ywid2 = ywid; xwid2 = aspect*ywid2; if( xwid2 > xwid ) { xwid2 = xwid; ywid2 = xwid2/aspect; } } xlo = xmid - xwid2; xup = xmid + xwid2; ylo = ymid - ywid2; yup = ymid + ywid2; pad->SetPad( xlo, ylo, xup, yup ); } void TestSetAspect () { TCanvas *c = new TCanvas("c","c",0,0,700,500); Float_t px, py; hpx = new TH1F("hpx","This is the px distribution",100,-4,4); for (Int_t i = 0; i < 25000; i++) { gRandom->Rannor(px,py); hpx->Fill(px); } c->Divide(2,2); c->cd(1); hpx->Draw(); SetAspect( gPad,1); c->cd(2); hpx->Draw(); SetAspect( gPad,2); c->cd(3); hpx->Draw(); SetAspect( gPad,3); c->cd(4); hpx->Draw(); SetAspect( gPad,0.33); }