Hacktoberfest 2026: le issue che i maintainer hanno segnato per ottobre, aperte e adatte ai principianti. Sfoglia le issue Hacktoberfest

[graph] TScatter / TScatter2D stops drawing remaining points if a non-positive value is encountered in log scale

Aperta
#23,833 1 commento 0 reazioni 0 assegnatari Vedi su GitHub

I maintainer di solito rispondono entro 1 giorno

@muntasir-396 ci sta già lavorando.

Dal 25/10/2026.

  • #23834 di @muntasir-396 — aperta

Valutazione

Questa issue non è ancora stata valutata.

Descrizione

bug good first issue in:Graphics
Check duplicate issues
  • Checked for duplicates
Description

When plotting a TScatter or TScatter2D on a pad with logarithmic scale enabled (gPad->SetLogx(), SetLogy(), or SetLogz()), encountering any non-positive coordinate (x <= 0, y <= 0, or z <= 0) causes the painter to prematurely terminate the entire rendering loop via else break; instead of skipping the invalid point via else continue;.

As a consequence, if an early point in the array happens to be non-positive, all subsequent valid positive points are omitted from the canvas.

Expected behavior:
Points with non-positive values should simply not be drawn on a log-scale axis, while all other valid positive points in the scatter plot should continue to be rendered.

Observed behavior:
All points appearing after the first non-positive point in the dataset are dropped and never painted.

Reproducer

Save the following self-contained macro as test_scatter_log.C:

void test_scatter_log() {
   auto c = new TCanvas("c", "Scatter Log Test", 800, 600);
   c->SetLogy();

   // 5 points, where index 2 has non-positive y = 0
   const int n = 5;
   double x[n] = {1.0, 2.0, 3.0, 4.0, 5.0};
   double y[n] = {10.0, 20.0, 0.0, 40.0, 50.0};
   double col[n] = {1.0, 2.0, 3.0, 4.0, 5.0};
   double size[n] = {2.0, 2.0, 2.0, 2.0, 2.0};

   auto scatter = new TScatter(n, x, y, col, size);
   scatter->SetMarkerStyle(20);
   scatter->Draw("A");

   c->Update();
   // Only points 0 and 1 are drawn; points 3 and 4 are missing because of 'else break;'
}

Run with:

root -l test_scatter_log.C
ROOT version

ROOT 6.34/00 (or current master)

Installation method

Build from source

Operating system

macOS / Ubuntu Linux

Additional context

The issue is located in hist/histpainter/src/TGraphPainter.cxx:

  • In TGraphPainter::PaintScatter (lines ~4500 and ~4506)
  • In TGraphPainter::PaintScatter2D (lines ~4734, ~4740, and ~4746)

In all these loops, replacing else break; with else continue; prevents aborting the marker loop when an unrenderable point is reached. This makes a great good first issue for new contributors.

Lingua principale
C++
Stelle
3.3k
Fork
1.6k
Merge medio
2g 14h
PR unite (30g)
192

Preparare l'ambiente

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di root-project/root

Tutte le issue di root-project/root

Issue simili

Altre issue su C++

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.