57 lines
1.9 KiB
Python
57 lines
1.9 KiB
Python
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')
|