If possible, I want to avoid complex developments, so I am considering to draw custom overlays to provide perhaps a more comprehensive plot by painting specific TLines and TGraphs onto the outgoing canvas. 
However, I am uncertain of the coordinate system used once drawing the initial projection. I basically tried to plot a TGraph onto a TCanvas with and without projection, but it seems TGraph gets unexpected coordinate and paint in incorrect position as compared to axis values.
I could find THistPainter::ProjectAitoff2xy here, but it is not so clear from where this projection is called while painting the histogram.
./hist/histpainter/inc/THistPainter.h: static Int_t ProjectAitoff2xy(Double_t l, Double_t b, Double_t &Al, Double_t &Ab);
./hist/histpainter/src/THistPainter.cxx:Int_t THistPainter::ProjectAitoff2xy(Double_t l, Double_t b, Double_t &Al, Double_t &Ab)
./hist/histpainter/src/THistPainter.cxx: func = ProjectAitoff2xy;
./hist/histpainter/src/TPainter3dAlgorithms.cxx: THistPainter::ProjectAitoff2xy(xyz[i*3 + 0], xyz[i*3 + 1], al, ab);
Also, please find a piece of code, if found to be useful for discussions.
Additionally in my example below, I have issue for zooming in the projected plot (perhaps due to colz?) after making some clicks colorbar & axis are deappearing.
#include <TGraph.h>
#include <TH2.h>
#include <THistPainter.h>
#include <TCanvas.h>
#include <TStyle.h>
#include <TColor.h>
#include <TLegend.h>
#include <cmath>
void ProjectSkymap() {
TRandom3 rnd; rnd.SetSeed(42);
const int fs = 256, nPoints = 1024;
Double_t lon[nPoints], lat[nPoints];
for (int i = 0; i < nPoints; ++i) {
lon[i] = -180 + i * (360.0 / (nPoints - 1)); // Generate longitude values from -180 to 180
lat[i] = 180 * cos(i * (M_PI / (nPoints - 1))); // Test A: Generate latitude values as a cose wave (out of band)
// lat[i] = 90 * sin(i * (M_PI / (nPoints - 1))); // Test B: Generate latitude values as a sine wave
// lat[i] = 90 * cos(i * (M_PI / (nPoints - 1))); // Test C: Generate latitude values as a cose wave
}
TGraph* g = new TGraph(nPoints, lon, lat);
TH2D* hProj = new TH2D("hh", "Test Histogram", fs, -180, 180, fs, -90, 90);
for (int i = 0; i < nPoints; ++i) {
hProj->Fill(lon[i], lat[i]);
double x = rnd.Uniform(-180, 180);
double y = rnd.Uniform(-90, 90);
hProj->Fill(x, y, 0.75);
}
double scaleX = 312, scaleY = scaleX/2; // ISSUE: Needs proper scaling for Aitoff projection (in this case)
// double scaleX = 0, scaleY = scaleX/2; // Unexpected behavior (low out of scale)
TGraph* g_proj = new TGraph();
for (int i = 0; i < nPoints; ++i) {
Double_t l = lon[i];
Double_t b = lat[i];
Double_t Al, Ab;
THistPainter::ProjectAitoff2xy(l, b, Al, Ab);
g_proj->SetPoint(i, Al / scaleX, Ab / scaleY);
}
// Create a canvas with two pads
TCanvas *c1 = new TCanvas("c1", "Skymap Projections", 1200, 600);
gStyle->SetOptStat(0);
c1->Divide(2, 1);
c1->cd(1);
c1->SetGridx(1);
hProj->SetTitle("Default Projection");
hProj->Draw("COLZ");
g->SetMarkerStyle(kFullCircle);
g->SetMarkerColor(kRed);
g->SetLineWidth(2);
g->SetLineStyle(2);
g->SetLineColor(kRed);
g->Draw("L SAME");
c1->cd(1)->Update();
c1->cd(2);
c1->SetGridx(1);
hProj->SetTitle("Aitoff Projection");
hProj->Draw("AXIS COLZ");
hProj->Draw("AITOFF SAME");
g_proj->SetMarkerStyle(kFullCircle);
g_proj->SetMarkerColor(kRed);
g_proj->SetLineWidth(2);
g_proj->SetLineStyle(2);
g_proj->SetLineColor(kRed);
g_proj->Draw("L SAME");
c1->cd(2)->Update();
}
(Here is the picture of test A, the result if after stretching the graph coordinate by a specific scaling factor)