# Generated by pandoc-plot 1.5.4
import matplotlib.pyplot as plt
import numpy as np

np.random.seed(2019)

import random
import math
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.patches as mpatches
import itertools

# Hexagon radius in mm
RADIUS = 4

# Dimensions of the bounding box of the hexagons
WIDTH = math.sqrt(3) * RADIUS
HEIGHT = 2 * RADIUS

mm_to_in = 0.03937008

def draw_hexagon(ax, center, radius, color='w'):
    ax.add_patch(
        mpatches.RegularPolygon(
            xy=center,
            numVertices=6,
            radius=radius + 0.2,
            facecolor=color,
            edgecolor="none",
            orientation=0,
            fill=True,
        )
    )

figure, ax = plt.subplots(
    1, 1, figsize=(100 * mm_to_in, 100 * mm_to_in), frameon=False
)

# Dimensions of the page in mm
ax.set_xlim([0, 100])
ax.set_ylim([0, 100])

centers=list()
for offset_x, offset_y in [(0, 0), (WIDTH / 2, (3 / 2) * RADIUS)]:
    rows = np.arange(start=offset_x, stop=105, step=WIDTH)
    columns = np.arange(start=offset_y, stop=105, step=3 * RADIUS)
    for x, y in itertools.product(rows, columns):
        centers.append((x,y))

colormap = plt.get_cmap('inferno')
for (x,y) in centers:
    # radius away from bottom left corner
    # proportional to the distance of the top right corner
    # i.e. 0 < r < 1
    r = math.hypot(x, y) / math.hypot(100, 100)
    draw_hexagon(ax, center=(x, y), radius=RADIUS, color=colormap(r + random.gauss(0, 0.01)))

ax.axis("off")
plt.subplots_adjust(top=1, bottom=0, left=0, right=1)
Click here to see how this plot was generated.