Barcode#
This demo shows how to produce a bar code.
The figure size is calculated so that the width in pixels is a multiple of the
number of data points to prevent interpolation artifacts. Additionally, the
Axes
is defined to span the whole figure and all Axis
are turned off.
The data itself is rendered with ~.Axes.imshow
using
code.reshape(1, -1)
to turn the data into a 2D array with one row.imshow(..., aspect='auto')
to allow for non-square pixels.imshow(..., interpolation='nearest')
to prevent blurred edges. This should not happen anyway because we fine-tuned the figure width in pixels, but just to be safe.
import matplotlib.pyplot as plt
import numpy as np
code = np.array([
1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1,
0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0,
1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1,
1, 0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1])
pixel_per_bar = 4
dpi = 100
fig = plt.figure(figsize=(len(code) * pixel_per_bar / dpi, 2), dpi=dpi)
ax = fig.add_axes([0, 0, 1, 1]) # span the whole figure
ax.set_axis_off()
ax.imshow(code.reshape(1, -1), cmap='binary', aspect='auto',
interpolation='nearest')
plt.show()
… admonition:: References
The use of the following functions, methods, classes and modules is shown in this example:
matplotlib.axes.Axes.imshow
/matplotlib.pyplot.imshow
matplotlib.figure.Figure.add_axes