Как устранить пробелы между изображением и линейным сюжетом?Установка hspace на 0 не делает этого - PullRequest
0 голосов
/ 27 сентября 2018

Так что я пытаюсь получить график интенсивности и изображение спектра, привязанного вместе в Matplotlib.Но это просто не сработает.Я попробовал большинство вещей, предложенных в этом и этом вопросе, но это для одного и того же рода сюжетов, и ни один из них не заставил пропасть исчезнуть.Тот, который я использовал в своем коде, установил ключевое слово аргумент gridspec_kw = {'wspace':0, 'hspace':0} в plt.subplots(), мне показался наиболее разумным, но он тоже не удался.Как я должен устранить все пробелы между изображением и графиком?

Моя версия Matplotlib 2.2.2.

Код:

impath = "Picture349.jpg" #a pic from the spectroscope
image = Image.open("Picture349.jpg")
imx, imy = image.size
imarray = np.asarray(image)
plt.imshow(image)

fig, (axint, axim) = plt.subplots(2,1, gridspec_kw = {'wspace':0, 'hspace':0}, sharex=True)

#get a single row of pixels from the middle of the image, extend and plot it
pixrownum = imy//2
colorcol = imarray[pixrownum]
rainbow = np.broadcast_to(colorcol, (100, *colorcol.shape))
axim.imshow(rainbow)
axim.get_yaxis().set_visible(False)

#get and plot intensity
bw = image.convert("L")
xcoords = np.arange(imx)
bwarray = np.asarray(bw)
axint.plot(xcoords, bwarray[pixrownum], "b")
axint.get_xaxis().set_visible(False)

plt.show()

Результат: plot by the code

1 Ответ

0 голосов
/ 28 сентября 2018

Проблема возникает из-за того, что соотношение сторон вашего изображения установлено на «равно» по умолчанию в plt.imshow().Это меняет макет ваших участков и влияет на параметр hspace.

У вас есть 2 варианта.Сначала вы можете установить соотношение сторон вашего изображения на «auto» и оставить значение hspace равным 0. Однако, если соотношение сторон имеет важное значение, вы можете вручную отрегулировать параметр hspace, задав отрицательное значение.

Используя простой пример:

image = np.random.randint(0,20,(300,1300)) # fake data

# ====== Option 1 ======
fig, (axint, axim) = plt.subplots(2, 1, gridspec_kw = {'hspace':0})
axim.imshow(image, aspect="auto")

# ====== Option 2 ======
# fig, (axint, axim) = plt.subplots(2, 1, gridspec_kw = {'hspace':-0.23})
# axim.imshow(image)

axim.get_yaxis().set_visible(False)

axint.plot(np.arange(0,1300), np.random.randn(1300), "b")
axint.get_xaxis().set_visible(False)

plt.show()

Оба метода дают:

enter image description here

Я думаю, что вариант 1 лучше, если аспектсоотношение не важно.Вариант 2 требует проб и ошибок, чтобы найти правильный параметр для hspace.Кроме того, если вы измените размер фигуры путем перетаскивания окна, опция 2 не будет правильно масштабироваться

...