When I use matplotlib's imshow() in python to represent a small matrix, it produces a some sort if smoothing between pixels. Is there any way to have this in Matlab when using imshow or imagesc?
For example, using matplotlib this is the output of the identity matrix imshow(eye(3)):
while in matlab, imagesc(eye(3)):
A solution I can think of is to extrapolate and smooth using some filter, but that won't be relevant for the single pixel levels. I've also tried myaa and export_fig, but they are not satisfactory. Myaa is taking all GUI usabily after being applied, so I can't zoom in or out, and export_fig makes me save the figure to a file and then operate on that file, too cumbersome. So, is there a way to tell the figure engine of matlab (java or what not) to do this smoothing while keeping the nice usability of the figure GUI?
解決方案
It is due to the default interpolation which is set to 'bilinear'. I think 'none' would be a more intuitive default. You can change the default interpolation method (eg interpolation=None) with:
mpl.rcParams['image.interpolation'] = 'none'
More information about customising Matplotlib can be found on the website
The code below will give you an overview of all interpolation methods:
methods = [None, 'none', 'nearest', 'bilinear', 'bicubic', 'spline16', 'spline36', 'hanning', 'hamming', \
'hermite', 'kaiser', 'quadric', 'catrom', 'gaussian', 'bessel', 'mitchell', 'sinc', 'lanczos']
grid = np.random.rand(4,4)
fig, ax = plt.subplots(3,6,figsize=(12,6), subplot_kw={'xticks': [], 'yticks': []})
fig.subplots_adjust(hspace=0.3, wspace=0.05)
ax = ax.ravel()
for n, interp in enumerate(methods):
ax[n].imshow(grid, interpolation=interp)
ax[n].set_title(interp)