Pracuję nad projektem, w którym muszę ułożyć siatkę z 10 rzędami i 3 kolumnami. Chociaż udało mi się stworzyć fabułę i ułożyć partycje, nie byłem w stanie stworzyć ładnej fabuły bez białej przestrzeni takiej jak ta poniżej z gridspec documentatation. .Jak usunąć spację między subplots w matplotlib.pyplot?
Próbowałem następujące posty, ale nadal nie jest w stanie całkowicie usunąć biały obszar, jak w przykładzie obrazu. Czy ktoś może mi dać jakieś wskazówki? Dzięki!
Poniżej jest mój kod. The full script is here on GitHub. Uwaga: images_2 i images_fool są zarówno numerowanymi tablicami spłaszczonych obrazów o kształcie (1032, 10), natomiast delta jest macierzą obrazu o kształcie (28, 28).
def plot_im(array=None, ind=0):
"""A function to plot the image given a images matrix, type of the matrix: \
either original or fool, and the order of images in the matrix"""
img_reshaped = array[ind, :].reshape((28, 28))
imgplot = plt.imshow(img_reshaped)
# Output as a grid of 10 rows and 3 cols with first column being original, second being
# delta and third column being adversaril
nrow = 10
ncol = 3
n = 0
from matplotlib import gridspec
fig = plt.figure(figsize=(30, 30))
gs = gridspec.GridSpec(nrow, ncol, width_ratios=[1, 1, 1])
for row in range(nrow):
for col in range(ncol):
plt.subplot(gs[n])
if col == 0:
#plt.subplot(nrow, ncol, n)
plot_im(array=images_2, ind=row)
elif col == 1:
#plt.subplot(nrow, ncol, n)
plt.imshow(w_delta)
else:
#plt.subplot(nrow, ncol, n)
plot_im(array=images_fool, ind=row)
n += 1
plt.tight_layout()
#plt.show()
plt.savefig('grid_figure.pdf')
Działa jak magia, dzięki @ImportanceOfBeingErnest! Zastanawiasz się, dlaczego używasz figsize = (4, 10) zamiast figsize = (10, 10) ... ten drugi natychmiast przywraca przestrzeń. –
Dlaczego potrzebujesz kwadratu wielkości, jeśli masz 3 razy więcej wierszy niż kolumn? Możesz oczywiście ustawić go na (10,10), a następnie ponownie dostosować parametry "left" i "right". Mój wybór 'figsize = (4, 10)' jest bardziej podyktowany myślą, że posiadanie wierszy 'n' i' m' kolumn, może być odpowiednie dla fig (m + 1, n); reszta jest następnie wykonywana przez dopracowanie parametrów podpozycji. – ImportanceOfBeingErnest
Rozumiem. Tak więc "figsize" tak naprawdę odnosi się do ogólnego rozmiaru obrazu zamiast do wątków. Pomyślałem sobie. –