Files
algo2025/dynamic/plotter.py
2025-12-18 16:00:22 +08:00

57 lines
1.9 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import sys
def create_plots(csv_file_path):
"""
读取CSV文件生成图表并保存到磁盘
"""
try:
df = pd.read_csv(csv_file_path)
except FileNotFoundError:
print(f"错误:找不到文件 {csv_file_path}")
sys.exit(1)
# 算法名称映射
algo_names = {
'v1': '朴素动态规划(三层循环)',
'v2': '优化二维动态规划',
'v3': '空间优化一维动态规划'
}
df['algo_name'] = df['algo'].map(algo_names)
# 设置绘图风格
sns.set_theme(style="whitegrid")
# 图表1运行时间与物品数量的关系
plt.figure(figsize=(10, 6))
time_plot = sns.lineplot(data=df, x='n', y='time_us', hue='algo_name', marker='o', palette='viridis')
plt.title('平均运行时间与物品种类数量(n)的关系')
plt.xlabel('物品种类数量(n)')
plt.ylabel('平均运行时间(微秒)')
time_plot.legend(title='算法')
plt.grid(True, which='both', linestyle='--')
plt.savefig('time_vs_n.png', dpi=300)
plt.close()
# 图表2操作次数与物品数量的关系
plt.figure(figsize=(10, 6))
ops_plot = sns.lineplot(data=df, x='n', y='ops', hue='algo_name', marker='o', palette='plasma')
plt.title('关键操作次数与物品种类数量(n)的关系')
plt.xlabel('物品种类数量(n)')
plt.ylabel('平均关键操作次数(对数尺度)')
plt.yscale('log')
ops_plot.legend(title='算法')
plt.grid(True, which='both', linestyle='--')
plt.savefig('ops_vs_n.png', dpi=300)
plt.close()
if __name__ == '__main__':
if len(sys.argv) > 1:
# 使用命令行参数指定的CSV文件
create_plots(sys.argv[1])
else:
# 如果没有提供参数,使用默认文件名
create_plots('results.csv')