Skip to content

Commit bfa8b88

Browse files
NelleVdstansby
authored andcommitted
Backport PR #12117: Fix Agg extent calculations for empty draws
1 parent 06e3dd0 commit bfa8b88

File tree

2 files changed

+17
-4
lines changed

2 files changed

+17
-4
lines changed

lib/matplotlib/tests/test_backend_pdf.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -238,3 +238,11 @@ def test_failing_latex(tmpdir):
238238
plt.xlabel("$22_2_2$")
239239
with pytest.raises(RuntimeError):
240240
plt.savefig(path)
241+
242+
243+
def test_empty_rasterised():
244+
# Check that emtpy figures that are rasterised save to pdf files fine
245+
with PdfPages(io.BytesIO()) as pdf:
246+
fig, ax = plt.subplots()
247+
ax.plot([], [], rasterized=True)
248+
fig.savefig(pdf, format="pdf")

src/_backend_agg.cpp

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -213,10 +213,15 @@ agg::rect_i RendererAgg::get_content_extents()
213213
}
214214
}
215215

216-
r.x1 = std::max(0, r.x1);
217-
r.y1 = std::max(0, r.y1);
218-
r.x2 = std::min(r.x2 + 1, (int)width);
219-
r.y2 = std::min(r.y2 + 1, (int)height);
216+
if (r.x1 == width && r.x2 == 0) {
217+
// The buffer is completely empty.
218+
r.x1 = r.y1 = r.x2 = r.y2 = 0;
219+
} else {
220+
r.x1 = std::max(0, r.x1);
221+
r.y1 = std::max(0, r.y1);
222+
r.x2 = std::min(r.x2 + 1, (int)width);
223+
r.y2 = std::min(r.y2 + 1, (int)height);
224+
}
220225

221226
return r;
222227
}

0 commit comments

Comments
 (0)