def paarabstaende(farben, namen=None):
namen = namen if namen is not None else list(range(1, len(farben) + 1))
return pd.DataFrame([{"a": namen[i], "b": namen[j],
"dE": abstand(farben[i], farben[j])}
for i, j in itertools.combinations(range(len(farben)), 2)])
okabe_ab = paarabstaende(OKABE, OKABE_NAMEN)
print(okabe_ab.nsmallest(3, "dE").to_string(index=False))
print({"minimum": round(okabe_ab["dE"].min(), 1),
"median": round(okabe_ab["dE"].median(), 1),
"maximum": round(okabe_ab["dE"].max(), 1),
"paare": len(okabe_ab)})
regen_ab = paarabstaende(REGEN12)
print(regen_ab.nsmallest(3, "dE").to_string(index=False))
print({"minimum": round(regen_ab["dE"].min(), 1),
"median": round(regen_ab["dE"].median(), 1),
"paare_unter_20": int((regen_ab["dE"] < 20).sum()),
"paare": len(regen_ab)})
fig, achsen = plt.subplots(2, 1, figsize=(7, 2.6))
for achse, (titel, pal) in zip(achsen, [("Okabe-Ito (8 Farben)", OKABE),
("Regenbogen (12 Farben)", REGEN12)]):
for k, farbe in enumerate(pal):
_ = achse.bar(k, 1, width=1, color=farbe)
_ = achse.set_title(titel, fontsize=10)
_ = achse.axis("off")
plt.tight_layout()
plt.show()