| import matplotlib.pyplot as plt | |
| import numpy as np | |
| from PIL import Image | |
| from typing import List | |
| import io | |
| def fig2img(fig: plt.Figure): | |
| """Convert a Matplotlib figure to a PIL Image and return it""" | |
| plt.close() | |
| buf = io.BytesIO() | |
| fig.savefig(buf) | |
| buf.seek(0) | |
| img = Image.open(buf) | |
| return img | |
| def show_tile_images( | |
| images: List[np.ndarray | Image.Image], | |
| width_parts: int, | |
| figsize = None, | |
| space = 0.0, | |
| pad = False, | |
| figcolor = 'white', | |
| titles: List[str] = None, | |
| title_color: str = None, | |
| title_background_color: str = None, | |
| title_font_size: int = None): | |
| ''' | |
| Show images in a tile format | |
| Args: | |
| images: List of images to show | |
| width_parts: Number of images to show in a row | |
| figsize: Size of the figure | |
| space: Space between images | |
| pad: Whether to pad the images or not | |
| figcolor: Background color of the figure | |
| titles: Titles of the images | |
| title_color: Color of the title | |
| title_background_color: Background color of the title | |
| title_font_size: Font size of the title | |
| Returns: | |
| Image: Image of the figure | |
| ''' | |
| height = int(np.ceil(len(images) / width_parts)) | |
| fig, axs = plt.subplots(height, width_parts, figsize=figsize if figsize != None else (8 * 2, 12 * height)) | |
| fig.patch.set_facecolor(figcolor) | |
| axes = axs.flatten() if isinstance(axs, np.ndarray) else [axs] | |
| titles = (titles or []) + np.full(len(images) - len(titles or []), None).tolist() | |
| for img, ax, title in zip(images, axes, titles): | |
| if title: | |
| params = {k: v for k, v in { 'color': title_color, 'backgroundcolor': title_background_color, 'fontsize': title_font_size }.items() if v is not None} | |
| ax.set_title(title, **params) | |
| ax.imshow(img.convert("RGB") if not isinstance(img, np.ndarray) else img) | |
| ax.axis('off') | |
| if pad: | |
| fig.subplots_adjust(left=0, bottom=0, right=1, top=1, wspace=space, hspace=space) | |
| fig.tight_layout(h_pad=space, w_pad = space, pad = space) | |
| else: | |
| fig.subplots_adjust(left=0, bottom=0, right=1, top=1, wspace=space, hspace=space) | |
| fig.tight_layout(h_pad=space, w_pad = space, pad = 0) | |
| plt.margins() | |
| plt.close() | |
| return fig2img(fig) |