"""Chosen load-accounting example: four jars in one crate; PNG to cwd.""" from pathlib import Path import math import matplotlib matplotlib.use("Agg") import matplotlib.pyplot as plt def main(): count, contents_per_jar, empty_jar, crate = 4, 0.50, 0.20, 0.80 contents = count * contents_per_jar jars = count * empty_jar tare = jars + crate gross = contents + tare assert math.isclose(gross, 3.60) assert math.isclose(gross - tare, 2.00) assert math.isclose((gross - jars) - tare, 1.20) fig, ax = plt.subplots(figsize=(7, 4.8), dpi=100, facecolor="white") fig.subplots_adjust(left=0.12, right=0.96, bottom=0.20, top=0.74) ax.set_axisbelow(True) ax.grid(axis="y", color="#dce4e9", linewidth=0.8) portions = [("Contents", [contents, 0, contents], "#286c96", "white"), ("Empty jars", [jars, jars, 0], "#e3a654", "#28333c"), ("Outer crate", [crate, crate, 0], "#ccd6df", "#28333c")] bottom = [0.0, 0.0, 0.0] for label, values, color, text_color in portions: ax.bar(range(3), values, bottom=bottom, width=0.58, color=color, edgecolor="white", linewidth=1.5, label=label) for x, value in enumerate(values): if value: ax.text(x, bottom[x] + value / 2, f"{value:.2f} kg", ha="center", va="center", fontsize=11, color=text_color) bottom[x] += value for x, value in enumerate([gross, tare, contents]): ax.text(x, value + 0.09, f"{value:.2f} kg", ha="center", fontsize=11, weight="bold", color="#172330") ax.set_xticks(range(3), ["Gross", "Tare", "Net contents"]) ax.set_ylim(0, 4.05) ax.set_yticks([0, 1, 2, 3, 4]) ax.set_ylabel("Mass (kg)", fontsize=11) ax.legend(loc="upper center", bbox_to_anchor=(0.5, -0.13), ncol=3, fontsize=10, frameon=False) fig.suptitle("Use the same load boundary for gross, tare and net", y=0.96, fontsize=14, weight="bold", color="#172330") fig.text(0.5, 0.875, "Four jars: 0.50 kg contents + 0.20 kg empty jar each; outer crate: 0.80 kg", ha="center", fontsize=10, color="#45535d") fig.text(0.5, 0.815, "3.60 kg gross − 1.60 kg composite tare = 2.00 kg contents", ha="center", fontsize=11, color="#172330") fig.text(0.5, 0.025, "Chosen bookkeeping example, not measured data. Count every packaging part exactly once.", ha="center", fontsize=9.5, color="#45535d") fig.savefig(Path.cwd() / (Path(__file__).stem + ".png"), dpi=100, facecolor="white", transparent=False) plt.close(fig) if __name__ == "__main__": main()