66 lines
1.7 KiB
Python
66 lines
1.7 KiB
Python
"""
|
|
"""
|
|
|
|
from random import random
|
|
import matplotlib.pyplot as plt
|
|
import numpy as np
|
|
|
|
|
|
def generate_grid(proportion, n, m=0):
|
|
"""Generate a grid nxm with random 1 (with proportion) or 0"""
|
|
if m == 0:
|
|
m = n
|
|
return [[int(random() < proportion) for _ in range(m)] for _ in range(n)]
|
|
|
|
|
|
def trim_axs(axs, N):
|
|
"""
|
|
Reduce *axs* to *N* Axes. All further Axes are removed from the figure.
|
|
"""
|
|
axs = axs.flat
|
|
for ax in axs[N:]:
|
|
ax.remove()
|
|
return axs[:N]
|
|
|
|
|
|
def grid_to_image(grids, filename):
|
|
""" """
|
|
plt.clf()
|
|
n_cols = 3
|
|
n_rows = len(grids) // 3
|
|
axs = plt.figure(constrained_layout=True).subplots(n_rows, n_cols)
|
|
axs = trim_axs(axs, len(grids))
|
|
for ax, grid in zip(axs, grids):
|
|
# for i, grid in enumerate(grids):
|
|
hight = len(grid)
|
|
lenght = len(grid[0])
|
|
ax.tick_params(left=False, bottom=False, labelleft=False, labelbottom=False)
|
|
ax.imshow(grid, cmap="binary")
|
|
ax.hlines(
|
|
y=np.arange(0, hight) + 0.5,
|
|
xmin=np.full(lenght, 0) - 0.5,
|
|
xmax=np.full(lenght, hight) - 0.5,
|
|
color="gray",
|
|
)
|
|
ax.vlines(
|
|
x=np.arange(0, lenght) + 0.5,
|
|
ymin=np.full(lenght, 0) - 0.5,
|
|
ymax=np.full(lenght, hight) - 0.5,
|
|
color="gray",
|
|
)
|
|
|
|
plt.savefig(filename)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
specs = [
|
|
{"proportion": 0.2, "n": 5},
|
|
{"proportion": 0.3, "n": 5},
|
|
{"proportion": 0.2, "n": 8},
|
|
{"proportion": 0.3, "n": 8},
|
|
{"proportion": 0.2, "n": 10},
|
|
{"proportion": 0.3, "n": 10},
|
|
]
|
|
grids = [generate_grid(**spec) for spec in specs]
|
|
grid_to_image(grids, "grids.pdf")
|