Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 372fd71

Browse filesBrowse files
committed
Merge pull request #1860 from mdboom/collection-fill
Bug with PatchCollection in PDF output
2 parents 8a17df0 + ae31877 commit 372fd71
Copy full SHA for 372fd71

File tree

Expand file treeCollapse file tree

7 files changed

+428
-8
lines changed
Filter options
Expand file treeCollapse file tree

7 files changed

+428
-8
lines changed

‎doc/users/whats_new.rst

Copy file name to clipboardExpand all lines: doc/users/whats_new.rst
+12Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,18 @@ revision, see the :ref:`github-stats`.
1717

1818
.. contents:: Table of Contents
1919

20+
.. _whats-new-1-2-2:
21+
22+
new in matplotlib 1.2.2
23+
=======================
24+
25+
Improved collections
26+
--------------------
27+
28+
The individual items of a collection may now have different alpha
29+
values and be rendered correctly. This also fixes a bug where
30+
collections were always filled in the PDF backend.
31+
2032
.. _whats-new-1-2:
2133

2234
new in matplotlib-1.2

‎lib/matplotlib/backend_bases.py

Copy file name to clipboardExpand all lines: lib/matplotlib/backend_bases.py
+14-6Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -352,6 +352,8 @@ def _iter_collection(self, gc, master_transform, all_transforms,
352352
gc0 = self.new_gc()
353353
gc0.copy_properties(gc)
354354

355+
original_alpha = gc.get_alpha()
356+
355357
if Nfacecolors == 0:
356358
rgbFace = None
357359

@@ -374,22 +376,28 @@ def _iter_collection(self, gc, master_transform, all_transforms,
374376
yo = -(yp - yo)
375377
if not (np.isfinite(xo) and np.isfinite(yo)):
376378
continue
379+
gc0.set_alpha(original_alpha)
377380
if Nfacecolors:
378381
rgbFace = facecolors[i % Nfacecolors]
379382
if Nedgecolors:
380-
fg = edgecolors[i % Nedgecolors]
381-
if Nfacecolors == 0 and len(fg)==4:
382-
gc0.set_alpha(fg[3])
383-
gc0.set_foreground(fg)
384383
if Nlinewidths:
385384
gc0.set_linewidth(linewidths[i % Nlinewidths])
386385
if Nlinestyles:
387386
gc0.set_dashes(*linestyles[i % Nlinestyles])
388-
if rgbFace is not None and len(rgbFace)==4:
387+
fg = edgecolors[i % Nedgecolors]
388+
if len(fg) == 4:
389+
if fg[3] == 0.0:
390+
gc0.set_linewidth(0)
391+
else:
392+
gc0.set_alpha(gc0.get_alpha() * fg[3])
393+
gc0.set_foreground(fg[:3])
394+
else:
395+
gc0.set_foreground(fg)
396+
if rgbFace is not None and len(rgbFace) == 4:
389397
if rgbFace[3] == 0:
390398
rgbFace = None
391399
else:
392-
gc0.set_alpha(rgbFace[3])
400+
gc0.set_alpha(gc0.get_alpha() * rgbFace[3])
393401
rgbFace = rgbFace[:3]
394402
gc0.set_antialiased(antialiaseds[i % Naa])
395403
if Nurls:

‎lib/matplotlib/backends/backend_pdf.py

Copy file name to clipboardExpand all lines: lib/matplotlib/backends/backend_pdf.py
+28-2Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1523,10 +1523,36 @@ def draw_path_collection(self, gc, master_transform, paths, all_transforms,
15231523
offsets, offsetTrans, facecolors, edgecolors,
15241524
linewidths, linestyles, antialiaseds, urls,
15251525
offset_position):
1526+
# We can only reuse the objects if the presence of fill and
1527+
# stroke (and the amount of alpha for each) is the same for
1528+
# all of them
1529+
can_do_optimization = True
1530+
1531+
if not len(facecolors):
1532+
filled = False
1533+
else:
1534+
if np.all(facecolors[:, 3] == facecolors[0, 3]):
1535+
filled = facecolors[0, 3] != 0.0
1536+
else:
1537+
can_do_optimization = False
1538+
1539+
if not len(edgecolors):
1540+
stroked = False
1541+
else:
1542+
if np.all(edgecolors[:, 3] == edgecolors[0, 3]):
1543+
stroked = edgecolors[0, 3] != 0.0
1544+
else:
1545+
can_do_optimization = False
1546+
1547+
if not can_do_optimization:
1548+
return RendererBase.draw_path_collection(
1549+
self, gc, master_transform, paths, all_transforms,
1550+
offsets, offsetTrans, facecolors, edgecolors,
1551+
linewidths, linestyles, antialiaseds, urls,
1552+
offset_position)
1553+
15261554
padding = np.max(linewidths)
15271555
path_codes = []
1528-
filled = len(facecolors)
1529-
stroked = len(edgecolors)
15301556
for i, (path, transform) in enumerate(self._iter_collection_raw_paths(
15311557
master_transform, paths, all_transforms)):
15321558
name = self.file.pathCollectionObject(
Binary file not shown.
Loading

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.