You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
[graph] TScatter / TScatter2D stops drawing remaining points if a non-positive value is encountered in log scale #23833
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:
voidtest_scatter_log() {
auto c = newTCanvas("c", "Scatter Log Test", 800, 600);
c->SetLogy();
// 5 points, where index 2 has non-positive y = 0constint 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 = newTScatter(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.
I have identified the root cause in TGraphPainter.cxx and have a working fix ready with tests. Could you please assign this issue to me? I would be happy to submit a PR for it. Thanks!
Activity
muntasir-396 commentedon Oct 25, 2026
Hi @ferdymercury @linev,
I have identified the root cause in
TGraphPainter.cxxand have a working fix ready with tests. Could you please assign this issue to me? I would be happy to submit a PR for it. Thanks![graph] Do not abort scatter painting loop on non-positive log coordi…