Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Remove white border when using subplot and imshow in python (Matplotlib)

import numpy as np
import sys
import matplotlib as mpl
import matplotlib.pyplot as plt

i use the following code to save an image

fig, ax = plt.subplots(frameon=False)
ax.axis                 ('off')
ax.imshow               (array[:,:,0,0,0])
fig.savefig             ("file.png", bbox_inches='tight')

However, what I get is enter image description here and this obviously still has a white border. How do I get rid of it?


The array.shape is: (256, 256, 1, 1, 3)

like image 218
refle Avatar asked Jun 14 '16 10:06

refle


2 Answers

Look at my example it may help you:

import numpy as np
import matplotlib.pyplot as plt

def save_image(data, filename):
    sizes = np.shape(data)     
    fig = plt.figure()
    fig.set_size_inches(1. * sizes[0] / sizes[1], 1, forward = False)
    ax = plt.Axes(fig, [0., 0., 1., 1.])
    ax.set_axis_off()
    fig.add_axes(ax)
    ax.imshow(data)
    plt.savefig(filename, dpi = sizes[0], cmap='hot') 
    plt.close()

data = np.random.randint(0, 100, (256, 256))
save_image(data, '1.png')

enter image description here

like image 81
Serenity Avatar answered Sep 18 '22 13:09

Serenity


Little modification to above answer:

def save_image(data, filename):
    fig = plt.figure(figsize=(1, 1))
    ax = plt.Axes(fig, [0., 0., 1., 1.])
    ax.set_axis_off()
    fig.add_axes(ax)
    ax.imshow(data, cmap="gray")
    fig.savefig(filename, dpi=data.shape[0]) 
    plt.close(fig)
like image 32
refle Avatar answered Sep 19 '22 13:09

refle