Hacktoberfest 2026: los issues que los mantenedores marcaron para octubre, abiertos y aptos para principiantes. Explorar issues de Hacktoberfest

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

Abierto
#23,833 1 comentario 0 reacciones 1 asignado Ver en GitHub

Los mantenedores suelen responder en 1 día

@muntasir-396 ya está trabajando en esto.

Desde el 25/10/2026.

  • #23834 de @muntasir-396 — abierto

Evaluación

Este issue todavía no se ha evaluado.

Descripción

bug 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.

Lenguaje dominante
C++
Estrellas
3.3k
Forks
1.6k
Merge medio
2 d 7 h
PR fusionados (30 d)
180

Preparar el entorno

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de root-project/root

Todos los issues de root-project/root

Issues similares

Más issues de C++

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.