On 07/16/2010 09:45 AM, Tony S Yu wrote:
> I recently noticed that setting the dpi for savefig doesn't work as
> expected when saving to pdf. Take the following code, for example:
>
> >>> import matplotlib.pyplot as plt
> >>>
> >>> plt.figure(figsize=(8,6))
> >>> plt.plot([1,2])
> >>> plt.savefig('test.png', dpi=100)
> >>> plt.savefig('test.pdf', dpi=100)
>
> The resulting png file is 800 x 600 (as expected), while the pdf file is
> 576 x 432 [which is (800 x 600) * 72/100]. I found an old thread
No, 576 x 432 is the paper size in points, not dots, so it is 8x6 inches
as requested. Since the content is all vector-based, there is no notion
of dots or pixels in test.pdf.
> <http://old.nabble.com/figsize-anomaly-in-pdf-td15234278.html>
> suggesting that a dpi of 72 should be hard coded into the PDF renderer
> for compatibility with older versions of the PDF spec. That makes sense;
> however, it'd be nice if the docstring for savefig told users about his
> behavior.
Yes, the docstring probably should point out that for vector backends
(pdf, ps, svg), the dpi setting affects only the resolution of
rasterized components.
>
> Below, is a patch to the savefig docstring. I'm sure someone else could
> word this better, but I thought I'd at least try.
>
> Best,
> -Tony
>
> P.S. maybe enough time has passed that most people have adopted PDF
> viewers/parsers using PDF >= 1.6, and this hard-coded dpi could be
> removed? Just a thought.
No; I think the present behavior is correct, regardless of the pdf
version. It is not really a hard-coded dpi at all, it is a confusing
aspect of the way mpl uses variables called "dpi". (But someone who
knows more about pdf may correct me if necessary.)
Eric
>
>
> Index: lib/matplotlib/figure.py
> ===================================================================
> --- lib/matplotlib/figure.py (revision 8561)
> +++ lib/matplotlib/figure.py (working copy)
> @@ -1018,7 +1018,10 @@
> *dpi*: [ None | scalar > 0 ]
> The resolution in dots per inch. If *None* it will default to
> - the value ``savefig.dpi`` in the matplotlibrc file.
> + the value ``savefig.dpi`` in the matplotlibrc file. NOTE: when
> + saving to pdf, the dpi will not affect the page dimensions (which
> + is always 72 dpi), but it will affect the resolution of rasterized
> + elements in the plot.
> *facecolor*, *edgecolor*:
> the colors of the figure rectangle
>
>
>
> ------------------------------------------------------------------------------
> This SF.net email is sponsored by Sprint
> What will you do first with EVO, the first 4G phone?
> Visit sprint.com/first -- http://p.sf.net/sfu/sprint-com-first
>
>
>
> _______________________________________________
> Matplotlib-devel mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/matplotlib-devel
------------------------------------------------------------------------------
This SF.net email is sponsored by Sprint
What will you do first with EVO, the first 4G phone?
Visit sprint.com/first -- http://p.sf.net/sfu/sprint-com-first
_______________________________________________
Matplotlib-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/matplotlib-devel