EPS rasterizing - a solution (and a question)

Hi,

A while ago, I sent an email around asking about the EPS output from matplotlib. The following example summarizes the problem well:

import matplotlib
matplotlib.use('Agg')
from matplotlib.pyplot import *

import numpy as np

nx,ny = 10,10

image = np.random.random((nx,ny))

fig = figure(figsize=(4,4))
ax = fig.add_subplot(111)
ax.pcolorfast(image)
fig.savefig('plot.eps')
fig.savefig('plot.pdf')
fig.savefig('plot.svg')

This produces files with the following sizes:

600K plot.eps
8.0K plot.pdf
20K plot.svg

The EPS file is much larger because the bitmap is being rasterized to a much higher resolution than a 10x10 grid. However, I eventually figured out that the best way to solve this, assuming that the pixels are square, and that the pixels line up with the axes is:

fig = figure(figsize=(4,4))
ax = fig.add_subplot(111,aspect='equal')
ax.imshow(image)
width = ax.get_position().width * 4
dpi = nx / width
fig.savefig('plot2.eps',dpi=dpi)

which produces

12K plot2.eps

As a temporary solution this works well - essentially matching the DPI to the resolution of the input array.

However, I have one remaining problem. In plot2.eps, the frame border has disappeared. Is this a bug? Does anyone know why this might be happening?

Thanks for any advice,

Thomas