%%cpp -d void fill_tree(const char *treeName, const char *fileName) { ROOT::RDataFrame d(25000); d.Define("px", []() { return gRandom->Gaus(); }) .Define("py", []() { return gRandom->Gaus(); }) .Define("pz", [](double px, double py) { return sqrt(px * px + py * py); }, {"px", "py"}) .Snapshot(treeName, fileName); } auto fileName = "df003_profiles.root"; auto treeName = "myTree"; fill_tree(treeName, fileName); ROOT::RDataFrame d(treeName, fileName); auto hprof1d = d.Profile1D({"hprof1d", "Profile of py versus px", 64, -4, 4}, "px", "py"); auto hprof2d = d.Profile2D({"hprof2d", "Profile of pz versus px and py", 40, -4, 4, 40, -4, 4, 0, 20}, "px", "py", "pz"); auto c1 = new TCanvas("c1", "Profile histogram example", 200, 10, 700, 500); hprof1d->DrawClone(); auto c2 = new TCanvas("c2", "Profile2D histogram example", 200, 10, 700, 500); hprof2d->DrawClone("BOX"); gROOT->GetListOfCanvases()->Draw()