Как удалить промежутки между * изображениями * в matplotlib?
Вдохновленный этим вопросом , я пытался получить изображения без пробелов.
В моем примере игрушек у меня есть четыре изображения, которые я хочу разместить в два ряда. Они имеют разные формы: различное количество строк, одинаковое количество столбцов . Несмотря на различия, они должны соответствовать единице без пробелов, как на следующем рисунке:
Когда я пытаюсь собрать их вместе, установка plt.subplots_adjust(wspace=0, hspace=0)
не делает трюк, потому что изображения имеют разные формы.
Вот код:
from numpy.random import rand import matplotlib.pyplot as plt test_data = [[rand(10,10), rand(10,10)],[rand(5,10), rand(5,10)]] f, axarr = plt.subplots(2,2) for i in range(2): for j in range(2): axarr[i, j].imshow(test_data[i][j]) plt.tight_layout() plt.subplots_adjust(wspace=0, hspace=0) plt.show()
Я пробовал играть с set_aspect
и equal
, но без везения.
Кто-нибудь знает, как получить эти пробелы?
- Matplotlib imshow: как применить маску к матрице
- Как увеличить контраст при построении netcdf с помощью imshow в matplotlib?
- предотвратить обрезание подстроек imshow неравного размера w / sharex
- scipy.misc.imshow RuntimeError ('Не удалось выполнить просмотр изображения')
- Как полностью удалить пустое пространство вокруг диаграммы рассеяния?
Вы можете установить height_ratios
подзаговоров с gridspec_kw
аргумента gridspec_kw
в вызове plt.subplots
и использовать высоты разных изображений для установки этого отношения.
От документов до plt.subplots()
:
gridspec_kw: dict, необязательный
Dict с ключевыми словами, переданными в конструктор GridSpec, используемый для создания сетки, на которой размещаются подзаголовки.
Обратите внимание, что ваш пример имел точный формат изображения по умолчанию matplotlib, поэтому вы не заметите появления каких-либо пробелов, пока вы не добавите больше строк или не измените формы изображений.
Таким образом, чтобы расширить это до общего решения, вам нужно будет установить размер фигуры в соответствии с формами изображений. Например, давайте расширим ваш пример до 3 строк, 2 столбца. Мы также будем явно устанавливать ширину фигуры на 8 дюймов и настраивать высоту в зависимости от размеров изображения.
from numpy.random import rand import matplotlib.pyplot as plt test_data = [[rand(10,10), rand(10,10)],[rand(5,10), rand(5,10)],[rand(2,10), rand(2,10)]] cmaps = [['viridis', 'binary'], ['plasma', 'coolwarm'], ['Greens', 'copper']] heights = [a[0].shape[0] for a in test_data] widths = [a.shape[1] for a in test_data[0]] fig_width = 8. # inches fig_height = fig_width * sum(heights) / sum(widths) f, axarr = plt.subplots(3,2, figsize=(fig_width, fig_height), gridspec_kw={'height_ratios':heights}) for i in range(3): for j in range(2): axarr[i, j].imshow(test_data[i][j], cmap=cmaps[i][j]) axarr[i, j].axis('off') plt.subplots_adjust(wspace=0, hspace=0, left=0, right=1, bottom=0, top=1) plt.show()
Вы можете объединить все изображения в один массив, который вы затем imshow
с помощью imshow
.
Чтобы убедиться, что между изображением нет дополнительного интервала, нам нужно рассчитать соотношение сторон и установить размер фигуры соответственно. (Чтобы показать, что я изменил число пикселей нижних изображений на 4).
from numpy.random import rand import matplotlib.pyplot as plt import numpy as np test_data = [[rand(10,10), rand(10,10)],[rand(4,10), rand(4,10)]] a = np.c_[np.array(test_data[0][0]),np.array(test_data[0][1]) ] b = np.c_[np.array(test_data[1][0]),np.array(test_data[1][1]) ] c = np.r_[a,b] dpi=100 width = 5 #inch height = width*c.shape[0]/float(c.shape[1]) fig, ax = plt.subplots(figsize=(width,height ), dpi=dpi) ax.imshow(c) ax.axis("off") plt.subplots_adjust(0,0,1,1) plt.savefig(__file__+".png") plt.show()
- Найти numpy.int_ в массиве int_s с помощью numba
- Как читать и добавлять в текстовый файл за один проход?
- Установите два графика matplotlib imshow, чтобы иметь одну и ту же цветовую карту
- Как добавить легенду к imshow () в matplotlib
- Python xticks в подзаголовках
- Удалите белую границу при использовании subplot и imshow в python (Matplotlib)
- как перерисовать изображение с помощью matplotlib python?
- Изображение не отображается с помощью imshow () OpenCV
- Плотность с питоном, создающим дифракционную картину с интегралами Бесселя, но она не перестает работать
- Вычисление значений hsv с помощью imshow
- matplot imshow добавить метку к каждому цвету и поместить в легенду