Удалите белую рамку при использовании подзаголовка и imshow в python (Matplotlib)

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

я использую следующий код для сохранения изображения

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

Однако я получаю следующее: введите здесь описание изображения и, очевидно, оно все еще имеет белую рамку. Как мне избавиться от этого?


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


person refle    schedule 14.06.2016    source источник
comment
Не могли бы вы попробовать использовать savefig("file.png", bbox_inches = 'tight', pad_inches = 0)?   -  person Serenity    schedule 14.06.2016
comment
уже пробовал, тоже не работает... (на самом деле ничего не меняет)   -  person refle    schedule 14.06.2016
comment
Без полного кода вам трудно помочь, потому что проблема связана с соотношением сторон и разрешением вашего изображения.   -  person Serenity    schedule 14.06.2016
comment
добавил еще кое-что. массив, который я хочу построить, считывается и имеет заданную форму. на самом деле в моем коде больше ничего нет   -  person refle    schedule 14.06.2016
comment
Что насчет формы массива?   -  person Serenity    schedule 14.06.2016
comment
как я писал выше: array.shape дает (256, 256, 1, 1, 3)   -  person refle    schedule 14.06.2016


Ответы (2)


Посмотрите на мой пример, он может вам помочь:

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')

введите описание изображения здесь

person Serenity    schedule 14.06.2016
comment
Не следует ли вместо аргумента cmap передать imshow? Ваше изображение выглядит как старое jet, если я запускаю код, я вижу viridis, как и ожидалось. - person Andras Deak; 13.03.2019
comment
Разве это не должно быть sizes[1] / sizes[0]? - person Mateen Ulhaq; 01.04.2021

Небольшая модификация приведенного выше ответа:

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)
person refle    schedule 14.06.2016