import matplotlib.pyplot as plt import numpy as np import io from PIL import Image def plot_radar_chart(traits): labels = list(traits.keys()) values = list(traits.values()) values.append(values[0]) # repeat first to close circle labels.append(labels[0]) angles = np.linspace(0, 2 * np.pi, len(labels), endpoint=False).tolist() angles += angles[:1] fig, ax = plt.subplots(figsize=(6, 6), subplot_kw=dict(polar=True)) ax.plot(angles, values, "o-", linewidth=2) ax.fill(angles, values, alpha=0.25) ax.set_yticklabels([]) ax.set_xticks(angles[:-1]) ax.set_xticklabels(labels) ax.set_title("Trait Radar Chart", y=1.1) buf = io.BytesIO() plt.savefig(buf, format="png", bbox_inches="tight") plt.close(fig) buf.seek(0) return Image.open(buf)