|
import matplotlib |
|
matplotlib.use('Agg') |
|
import matplotlib.pyplot as plt |
|
import numpy as np |
|
from PIL import Image |
|
import io |
|
|
|
DIMENSIONS = ["Generalization", "Relevance", "Artistry", "Efficiency"] |
|
|
|
def compute_sample_scores(results, prompt): |
|
"""模拟评分 - 实际项目应替换为真实评估逻辑""" |
|
return { |
|
"sd_v1_5": [4, 4, 4, 3], |
|
"openjourney_v4": [3, 4, 5, 3], |
|
"ldm_256": [2, 3, 3, 5] |
|
} |
|
|
|
def plot_radar(scores_dict, out_path="radar.png"): |
|
fig = plt.figure(figsize=(8, 8)) |
|
ax = fig.add_subplot(111, polar=True) |
|
|
|
angles = np.linspace(0, 2*np.pi, len(DIMENSIONS), endpoint=False) |
|
angles = np.concatenate((angles, [angles[0]])) |
|
|
|
for model, scores in scores_dict.items(): |
|
data = np.concatenate((scores, [scores[0]])) |
|
ax.plot(angles, data, linewidth=2, linestyle='solid', label=model) |
|
ax.fill(angles, data, alpha=0.1) |
|
|
|
ax.set_thetagrids(angles[:-1] * 180/np.pi, DIMENSIONS) |
|
ax.set_title("GRACE Evaluation Radar", size=14, pad=20) |
|
ax.legend(loc='upper right') |
|
|
|
buf = io.BytesIO() |
|
plt.savefig(buf, format='png', bbox_inches='tight') |
|
plt.close() |
|
buf.seek(0) |
|
return Image.open(buf) |