Hi all,

I sent pretty much this question a couple days ago, but it was tacked on

to another thread, so it may have gotten lost in the shuffle. So here it

is again:

This is how I thought MPL works, but it turns out I'm wrong, as the

example below indicates. What have I got wrong?

1) The size of a figure is defined in length units (inches), and can be

set by:

Figure.set_figsize_inches( (w,h) )

1b) The layout of the figure is defined in "figure units" so it can be

scaled by changing the figure size.

2) Size of text, width of lines, etc is defined in terms of length units

(points?).

3) When displaying to the screen, or creating an image (PNG) the pixel

size of text and line widths, etc is determined by the dpi setting,

which is set by:

Figure.set_dpi( val )

The trick here is that when printing, it's natural to think in terms of

inches, but when creating an image (for a web page, for instance), it is

natural to think in terms of pixel size. However, AFAIK, MPL does not

have a way to set the pixel size directly.

However, changing the dpi of the Figure doesn't seem to have any effect.

What's up John? shouldn't Figure.set_dpi effect the dpi of the resulting

PNG? I'm using MPL 0.84 on Linux.

-Chris

Enclosed is a sample script, and below are the results:

## ···

(7.9749999999999996, 5.6624999999999996) Which should result in a 638

x 453 Image DPI: 160.0 Size in Inches (7.9749999999999996, 5.6624999999999996) Which should result in a 1276 x 906 Image DPI: 160.0 Size in Inches (16.0, 12.0) Which should result in a 2560 x 1920 Image DPI: 80.0 Size in Inches (16.0, 12.0)------------------------------------------------------------------------

#!/usr/bin/env python2.4

import matplotlib print "using MPL version:", matplotlib.__version__ matplotlib.use("WXAgg")

import pylab import Numeric as N

x = N.arange(0, 2*N.pi, 0.1) y = N.sin(x)

pylab.plot(x,y) F = pylab.gcf()

# Save with the defaults DPI = F.get_dpi() print "DPI:", DPI Size = F.get_size_inches() print "Size in Inches", Size print "Which should

result in a %i x %i Image"%(DPI*Size[0], DPI*Size[1]) F.savefig("test1.png") # this gives me a 797 x 566 pixel image, which

isn't seem right. # these numbers correspond to 100 DPI# Now change the DPI: F.set_dpi(160) DPI = F.get_dpi() print "DPI:",

DPI Size = F.get_size_inches() print "Size in Inches", Size print "Which should result in a %i x %i Image"%(DPI*Size[0], DPI*Size[1]) F.savefig("test2.png") # this still gives me a 797 x 566 pixel image.

# The DPI of the figure is not being used.#Now change the Size: F.set_figsize_inches( (16.0, 12.0) ) DPI = F.get_dpi() print "DPI:", DPI Size = F.get_size_inches() print "Size

in Inches", Size print "Which should result in a %i x %i Image"%(DPI*Size[0], DPI*Size[1]) F.savefig("test1.png") # this gives

me a 1600 x 1200 pixel image, # which still corresponds to 100 DPI# Now change dpi again: F.set_dpi(80) print "DPI:", F.get_dpi() print

"Size in Inches", F.get_size_inches() F.savefig("test4.png") # Same

image, not change.

--

Christopher Barker, Ph.D.

Oceanographer

NOAA/OR&R/HAZMAT (206) 526-6959 voice

7600 Sand Point Way NE (206) 526-6329 fax

Seattle, WA 98115 (206) 526-6317 main reception

Chris.Barker@...259...