Убрать разделение между частями участка по горизонтали - PullRequest
1 голос
/ 05 мая 2020

У меня есть четыре 2D-массива, которые я хочу построить в четырех подзаголовках с помощью imshow. Я хочу, чтобы разделение между этими подзаголовками было удалено, чтобы подзаголовки соприкасались друг с другом, как в Документация Matplotlib (предпоследний пример). Моя попытка:

fig, axs = plt.subplots(2, 2, sharex='col', sharey='row', gridspec_kw={'hspace': 0, 'wspace': 0})
(ax1, ax2), (ax3, ax4) = axs

ax1.imshow(im1)
ax2.imshow(im2)
ax3.imshow(im3)
ax4.imshow(im4)

for ax in fig.get_axes():
    ax.label_outer()

plt.show()

Это дает

enter image description here

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

1 Ответ

1 голос
/ 05 мая 2020

Вы можете попробовать что-нибудь вроде этого ответа ImportanceOfBeingErnest . На его основе я подготовил следующий псевдокод для вашего вопроса. Вы можете попробовать и посмотреть, работает ли он для вас.

from matplotlib import gridspec

nrow, ncol = 2, 2

fig = plt.figure(figsize=(6,6)) 

gs = gridspec.GridSpec(nrow, ncol,
         wspace=0.0, hspace=0.0, 
         top=1.-0.5/(nrow+1), bottom=0.5/(nrow+1), 
         left=0.5/(ncol+1), right=1-0.5/(ncol+1)) 

ims = [im1, im2, im3, im4]

c = 0 # Counter for the ims array

for i in range(nrow):
    for j in range(ncol):
        ax= plt.subplot(gs[i,j])
        ax.imshow(ims[c])
        ax.set_xticklabels([])
        ax.set_yticklabels([])
        c += 1

for ax in fig.get_axes():
    ax.label_outer()       
...