"src/vscode:/vscode.git/clone" did not exist on "8d14a739bc9e446d6c92ef83eafe5782398118de"
Commit 92c07144 authored by jerrrrry's avatar jerrrrry
Browse files

Upload New File

parent f6a338d7
import argparse, pandas as pd, matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt, re, os
def find_avg_row(df):
for idx, row in df.iterrows():
if any(isinstance(cell, str) and re.search(r'平均值|Average', str(cell)) for cell in row):
return idx
return df.index[-1]
def extract_values(df):
idx = find_avg_row(df)
vals = [float(v) for v in df.iloc[idx].dropna().iloc[-4:] if str(v).replace('.', '').isdigit()]
if len(vals) != 4:
vals = [float(v) for v in df.iloc[-1].dropna().iloc[-4:] if str(v).replace('.', '').isdigit()]
if len(vals) != 4:
raise ValueError("无法提取4个百分比")
return {
"Total_throughput": vals[3],
"generate_throughput": vals[2],
"singel_road_generate_throughput": vals[1],
"generate_throughput_without_ttft": vals[0]
}
def plot_summary(file_path, output_prefix):
xls = pd.ExcelFile(file_path)
summary = {}
for sheet in xls.sheet_names:
try:
df = pd.read_excel(xls, sheet_name=sheet, header=None)
summary[sheet] = extract_values(df)
except Exception:
continue
if not summary:
print("❌ 无数据可绘图")
return
labels = ["Total_throughput", "generate_throughput",
"singel_road_generate_throughput", "generate_throughput_without_ttft"]
colors = ['#2E5984', '#FF8C42', '#4CB944', '#8C2F39']
models = list(summary.keys())
x = range(len(models))
bar_width = 0.18
plt.figure(figsize=(max(len(models)*1.2, 12), 8))
# 绘制柱状图
for i, lab in enumerate(labels):
vals = [summary[m][lab] for m in models]
offset = (i - 1.5) * bar_width
bars = plt.bar([p + offset for p in x], vals, width=bar_width, label=lab, color=colors[i])
# 添加带引导线的标注
for bar, v in zip(bars, vals):
height = bar.get_height()
# 引导线起点(柱顶中心)
line_start = (bar.get_x() + bar.get_width()/2, height)
# 文本位置(柱顶上方5%处)
text_pos = (line_start[0], height + max(vals)*0.05)
# 绘制引导线
plt.plot([line_start[0], text_pos[0]], [line_start[1], text_pos[1]],
color='gray', linestyle='--', linewidth=0.8, alpha=0.7)
# 添加带背景框的文本
plt.text(text_pos[0], text_pos[1], f"{v:.1f}%",
ha='center', va='bottom',
fontsize=6,
rotation=60,
bbox=dict(facecolor='white', edgecolor='gray', boxstyle='round,pad=0.2'))
plt.xticks(x, models, rotation=30, ha='right', fontsize=9)
plt.ylabel("Percentage", fontsize=10)
plt.title("Throughput Comparison", fontsize=12, pad=20)
# 调整图例
plt.legend(
bbox_to_anchor=(1.02, 1),
loc='upper left',
fontsize=9,
frameon=False
)
plt.subplots_adjust(right=0.8, bottom=0.15)
for ext in ['png', 'pdf']:
plt.savefig(f"{output_prefix}.{ext}", dpi=300 if ext == 'png' else None, bbox_inches='tight')
print(f"✅ 已保存:{output_prefix}.png / .pdf")
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument("xlsx_path")
parser.add_argument("-o", "--output", default="summary_chart")
args = parser.parse_args()
plot_summary(args.xlsx_path, args.output)
\ No newline at end of file
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment