This is slight modification of ntuple1.C example. 
A canvas with sub-pads is produced, stored to an sql data base and read back To run this macro, you need the hsimple.root file, produced by the hsimple.C macro
 
const char* 
dbname = 
"mysql://host.domain/test";
 
 
 
{
}
 
{
   
   delete gROOT->GetListOfFiles()->FindObject(
"hsimple.root");
 
   delete gROOT->GetListOfCanvases()->FindObject(
"c1");
 
 
   
   
   
   
   
   
   TPad *
pad1 = 
new TPad(
"pad1",
"This is pad1",0.02,0.52,0.48,0.98,21);
 
   TPad *
pad2 = 
new TPad(
"pad2",
"This is pad2",0.52,0.52,0.98,0.98,21);
 
   TPad *
pad3 = 
new TPad(
"pad3",
"This is pad3",0.02,0.02,0.48,0.48,21);
 
   TPad *
pad4 = 
new TPad(
"pad4",
"This is pad4",0.52,0.02,0.98,0.48,1);
 
   
   
   
   
   
   pad1->GetFrame()->SetFillColor(15);
 
   ntuple->Draw(
"3*px+2",
"px**2+py**2>1");
 
   ntuple->Draw(
"2*px+2",
"pz>2",
"same");
 
   ntuple->Draw(
"1.3*px+2",
"(px^2+py^2>4) && py>0",
"same");
 
   
   
   
   
   pad2->GetFrame()->SetFillColor(32);
 
   ntuple->Draw(
"pz:px>>hprofs",
"",
"goffprofs");
 
   
   
   
   
   pad3->GetFrame()->SetFillColor(38);
 
   pad3->GetFrame()->SetBorderSize(8);
 
   ntuple->Draw(
"py:px",
"pz<1",
"same");
 
   
   
   ntuple->Draw(
"pz:py:px",
"(pz<10 && pz>6)+(pz<4 && pz>3)");
 
   ntuple->Draw(
"pz:py:px",
"pz<6 && pz>4",
"same");
 
   ntuple->Draw(
"pz:py:px",
"pz<4 && pz>3",
"same");
 
   l4->AddText(
"You can interactively rotate this view in 2 ways:");
 
   l4->AddText(
"  - With the RotateCube in clicking in this pad");
 
   l4->AddText(
"  - Selecting View with x3d in the View menu");
 
   
 
 
 
 
 
   
   
 
}
 
{
   if (f2->
IsZombie()) { 
delete f2; 
return; }
 
 
 
   delete f2;
}
 
R__EXTERN TBenchmark * gBenchmark
 
ROOT::Detail::TRangeCast< T, true > TRangeDynCast
TRangeDynCast is an adapter class that allows the typed iteration through a TCollection.
 
R__EXTERN TStyle * gStyle
 
virtual void Start(const char *name)
Starts Benchmark with the specified name.
 
virtual void Show(const char *name)
Stops Benchmark name and Prints results.
 
TObject * Get(const char *namecycle) override
Return pointer to object identified by namecycle.
 
A ROOT file is an on-disk file, usually with extension .root, that stores objects in a file-system-li...
 
void ls(Option_t *option="") const override
List file contents.
 
A simple TTree restricted to a list of float variables only.
 
R__ALWAYS_INLINE Bool_t IsZombie() const
 
The most important graphics class in the ROOT system.
 
A Pave (see TPave) with text, lines or/and boxes inside.
 
Access an SQL db via the TFile interface.
 
void SetStatH(Float_t h=0.1)
 
void SetStatColor(Color_t color=19)
 
void SetStatW(Float_t w=0.19)