Drawing a horizontal TPaletteAxis

I am trying to draw a 2D histogram with the color palette at the bottom instead of at the side as the optio ‘colz’ does. I could create a new TPaletteAxis with different x and y coordinates, so the box can be rescaled and repositioned, but the color palette is still vertical (so it it pretty squeezed). Is there a way to rotate the color palette as well (and also pull the labels on the right to the bottom)?


Yes, the palette is always vertical. May be something can be done to switch automatically to horizontal when h<w

This PR https://github.com/root-project/root/pull/9028 implements this new feature.

Sounds great! I will follow the progress of the PR to see in which stable version it is included. Thanks a lot for the quick implementation.

And new example will come with the PR:

/// \file
/// \ingroup tutorial_hist
/// \notebook
/// When an histogram is drawn with the option `COLZ, a palette is automatically drawn
/// vertically on the right side of the plot. It is possible to move and resize this
/// vertical palette as shown on the left plot. The right plot demonstrates that, when the
/// width of the palette is larger than its height, the palette is automatically drawn
/// horizontally.
/// \macro_image
/// \macro_code
/// \author Olivier Couet

void movepalette()
   auto c = new TCanvas("", "",0,0,1100,550);

   auto h1 = new TH2D("h1","h1",40,-4,4,40,-20,20);
   auto h2 = new TH2D("h2","h2",40,-4,4,40,-20,20);
   float px, py;
   for (int i = 0; i < 25000; i++) {
      gRandom->Rannor(px,py); h1->Fill(px,5*py);
      gRandom->Rannor(px,py); h2->Fill(px,5*py);

   TPad *p1 = (TPad *)c->cd(1);
   TPad *p2 = (TPad *)c->cd(2);

   auto palette1 = new TPaletteAxis(4.05,-15,4.5,15,h1);

   auto palette2 = new TPaletteAxis(-3.,-25,3.,-23,h2);

   p1->cd(); h1->Draw("colz");
   p2->cd(); h2->Draw("colz");

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.