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
A hatched patch, with hatch transparency, renders fine with the inline or PNG backends, but alpha is ignored by the SVG or PDF backends. Did not test other backends.
A possible fix for SVG is simple, and included below. I can open a PR with it.
importmatplotlib.pyplotaspltfrommatplotlib.patchesimportRectangleplt.rcParams['hatch.linewidth'] =9patch=Rectangle(xy=(.1,.1), width=.5, height=.3,
facecolor="red",
edgecolor=(0.,0.,0.,.4),
hatch='/',
lw=4)
fig, ax=plt.subplots()
ax.add_patch(patch)
ax.set_title("SVG")
plt.savefig('test.svg')
ax.set_title("PDF")
plt.savefig('test.pdf')
ax.set_title("PNG")
plt.savefig('test.png')
# for uploading svg and pdf output was converted to png with inkscape:# inkscape -z -e testsvg.png test.svg -d 72# inkscape -z -e testpdf.png test.pdf -d 72# and concatenated with imagemagick:# montage testsvg.png testpdf.png test.png -mode concatenate -tile 1x3 out.png
Actual outcome
In addition, rendering of the PDF output is inconsistent across viewers (possibly due to #3841 and further inconsistency described in #14639). Inkscape views/converts nicely (as shown) but imagemagick doesn't even render the edge opacity. Firefox also views correctly. Adobe Reader DC behaves similar to imagemagick.
Expected outcome
SVG and PDF output should look like the PNG one.
FIX
I took a look at the generated SVG. The hatch description has the following style (note the lack of stroke-opacity):
The problem lies in the _write_hatches method, in backend_svg.py, which never sets any stroke-opacity. A fix for SVG is as simple as adding 'stroke-opacity': str(stroke[3]) to the dict passed to the generate_css call.
Matplotlib version
Operating system: Ubuntu 18.04
Matplotlib version: 3.1.2
Matplotlib backend: SVG/PDF/PNG
Python version: 3.6.8
Installed via pip.
The text was updated successfully, but these errors were encountered:
For the PDF backend, however, I can't really contribute. Took a look at the code and it seems to be solvable in the writeHatches method of backend_pdf.py. But I know nothing of PDF and couldn't find an obvious point to include the alpha.
Further checking other backends: cairo doesn't even draw the hatching. Agg draws it but also without alpha.
Bug report
Bug summary
A hatched patch, with hatch transparency, renders fine with the inline or PNG backends, but alpha is ignored by the SVG or PDF backends. Did not test other backends.
A possible fix for SVG is simple, and included below. I can open a PR with it.
This is separate from #8431 or #9894.
Code for reproduction
Actual outcome
In addition, rendering of the PDF output is inconsistent across viewers (possibly due to #3841 and further inconsistency described in #14639). Inkscape views/converts nicely (as shown) but imagemagick doesn't even render the edge opacity. Firefox also views correctly. Adobe Reader DC behaves similar to imagemagick.
Expected outcome
SVG and PDF output should look like the PNG one.
FIX
I took a look at the generated SVG. The hatch description has the following style (note the lack of
stroke-opacity
):The problem lies in the
_write_hatches
method, inbackend_svg.py
, which never sets anystroke-opacity
. A fix for SVG is as simple as adding'stroke-opacity': str(stroke[3])
to the dict passed to thegenerate_css
call.Matplotlib version
Installed via pip.
The text was updated successfully, but these errors were encountered: