使用第一个,其他有问题、忽略。
1.3
import os
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties
import numpy as np
# 指定的文件夹路径
output_folder = 'runs/train_v8_mtYAWDDceshi/loss/dbt/1'
# 读取文件
file_paths = [
'runs/train_v8_YD/v8n.csv',
'runs/train_v8_mtYAWDDceshi/loss/v8n-DIOU.csv',
'runs/train_v8_mtYAWDDceshi/loss/v8n-EIoU.csv',
'runs/train_v8_mtYAWDDceshi/loss/v8n-SIoU.csv',
'runs/train_v8_mtYAWDDceshi/loss/v8n-FocalLoss.csv',
'runs/train_v8_mtYAWDDceshi/loss/v8n-ShapeIoU.csv'
]
# 加载数据并清理列名
dataframes = [pd.read_csv(file_path) for file_path in file_paths]
for df in dataframes:
df.columns = df.columns.str.strip()
# 尝试的字体文件路径列表
font_paths = [
'/usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf',
'/usr/share/fonts/truetype/liberation/LiberationSans-Regular.ttf',
'C:\\Windows\\Fonts\\msyh.ttc', # 微软雅黑字体,Windows 系统
'C:\\Windows\\Fonts\\simsun.ttc' # 黑体字体,Windows 系统
]
# 找到可用的字体文件路径
for path in font_paths:
if os.path.exists(path):
font_path = path
break
else:
raise FileNotFoundError("未找到支持中文的字体文件,请指定一个存在的字体文件路径。")
# 指定找到的字体
font = FontProperties(fname=font_path)
# 输出找到的字体
print("找到的字体文件路径:", font_path)
# 更新绘图函数,加入颜色、大小、粗细的自定义功能,以及保存到指定文件夹的功能
def plot_comparison_final(dataframes, metric, title, folder, filename, colors=None, linewidths=None, linestyles=None):
# 如果文件夹不存在,则创建文件夹
if not os.path.exists(folder):
os.makedirs(folder)
plt.figure(figsize=(10, 6))
for i, df in enumerate(dataframes):
file_name_without_extension = file_paths[i].split('/')[-1].split('.')[0]
color = colors[i] if colors else None
linewidth = linewidths[i] if linewidths else None
linestyle = linestyles[i] if linestyles else None
plt.plot(df['epoch'], df[metric], label=file_name_without_extension, color=color, linewidth=linewidth,
linestyle=linestyle)
plt.title(title, fontproperties=font)
# plt.xlabel('Epoch', fontproperties=font)
plt.xlabel('训练轮次',
# {'Epoch': '训练轮次'}[metric],
fontproperties=font) # 更新X轴标签
plt.ylabel({
'metrics/precision(B)': '精准率P',
'metrics/recall(B)': '召回率R',
'metrics/mAP50(B)': '平均值P精度map',
'metrics/mAP50-95(B)': '精度map95',
'val/loss_SUM': '损失函数值loss'
}[metric], fontproperties=font) # 更新y轴标签
plt.legend(prop=font)
plt.grid(True)
plt.savefig(os.path.join(folder, filename))
plt.show()
# 自定义颜色、大小、粗细
colors = ['black', 'r', 'g', 'b', (1, 0.63, 0.51), 'purple'] # 黑色、红色、绿色、蓝色 #(1, 0.87, 0.71) 222/255=0.87
linewidths = [1, 1, 1, 1, 1, 1] # 线宽
# 一
# linestyles = [':','-', '--', '-.', (1, (3, 1, 1, 1)), (0, (3, 5, 1, 5))] # :dotted点线、-实线solid、--虚线dashed、-.点划线dashdot、
'''(0, (3, 5, 1, 5)):
第一个元素0通常表示一个连续的线条,但是在这个上下文中,它可能被忽略或者不被正确使用。
第二个元素3是虚线的长度。
第三个元素5是虚线之间的间隙长度。
第四个元素1是下一个虚线的长度。
第五个元素5是下一个间隙的长度。
这意味着线条将由三个点的实线和接下来的五个点的空白组成,然后是一个点的实线和接下来的五个点的空白,以此类推。'''
# # 二
linestyles = [':', '-', '--', '-.', '-', '-'] # 使用实线作为基础线型
markers = ['+', '*', '+', '*', '++++', '*****'] # 使用标记来模拟特殊效果
# 绘制对比图并保存到指定文件夹
plot_comparison_final(dataframes, 'metrics/precision(B)', '', output_folder, 'precision_comparison.png',
colors, linewidths, linestyles
+markers
)
plot_comparison_final(dataframes, 'metrics/recall(B)', '', output_folder, 'recall_comparison.png', colors,
linewidths, linestyles
+markers
)
plot_comparison_final(dataframes, 'metrics/mAP50(B)', '', output_folder, 'map50_comparison.png',
colors, linewidths, linestyles
+markers
)
plot_comparison_final(dataframes, 'metrics/mAP50-95(B)', '', output_folder, 'map50_95_comparison.png',
colors, linewidths, linestyles
# +markers
)
# 计算val/loss_SUM =val/box_loss+val/cls_loss+val/dfl_loss 并绘制对比图
for df in dataframes:
df['val/loss_SUM'] = df['val/box_loss'] + df['val/cls_loss'] + df['val/dfl_loss']
# df['lr/pg_sum'] = df['lr/pg0']
plot_comparison_final(dataframes, 'val/loss_SUM', '', output_folder, 'loss_sum_comparison.png', colors,
linewidths, linestyles
# +markers
)
1.2
import os
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties
import numpy as np
# 读取文件
file_paths = [
'runs/train_v8_YD/v8n.csv',
'runs/train_v8_mtYAWDDceshi/loss/v8n-DIOU.csv',
'runs/train_v8_mtYAWDDceshi/loss/v8n-EIoU.csv',
'runs/train_v8_mtYAWDDceshi/loss/v8n-SIoU.csv',
'runs/train_v8_mtYAWDDceshi/loss/v8n-FocalLoss.csv',
'runs/train_v8_mtYAWDDceshi/loss/v8n-ShapeIoU.csv'
]
# 加载数据并清理列名
dataframes = [pd.read_csv(file_path) for file_path in file_paths]
for df in dataframes:
df.columns = df.columns.str.strip()
# 尝试的字体文件路径列表
font_paths = [
'/usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf',
'/usr/share/fonts/truetype/liberation/LiberationSans-Regular.ttf',
'C:\\Windows\\Fonts\\msyh.ttc', # 微软雅黑字体,Windows 系统
'C:\\Windows\\Fonts\\simsun.ttc' # 黑体字体,Windows 系统
]
# 找到可用的字体文件路径
for path in font_paths:
if os.path.exists(path):
font_path = path
break
else:
raise FileNotFoundError("未找到支持中文的字体文件,请指定一个存在的字体文件路径。")
# 指定找到的字体
font = FontProperties(fname=font_path)
# 更新绘图函数,加入颜色、大小、粗细的自定义功能,以及保存到指定文件夹的功能
def plot_comparison_final(dataframes, metric, title, folder, filename, colors=None, linewidths=None, linestyles=None):
# 如果文件夹不存在,则创建文件夹
if not os.path.exists(folder):
os.makedirs(folder)
plt.figure(figsize=(10, 6))
for i, df in enumerate(dataframes):
file_name_without_extension = file_paths[i].split('/')[-1].split('.')[0]
color = colors[i] if colors else None
linewidth = linewidths[i] if linewidths else None
linestyle = linestyles[i] if linestyles else None
plt.plot(df['epoch'], df[metric], label=file_name_without_extension, color=color, linewidth=linewidth,
linestyle=linestyle)
plt.title(title, fontproperties=font)
plt.xlabel('Epoch', fontproperties=font)
plt.ylabel({
'metrics/precision(B)': '精准率P',
'metrics/recall(B)': '召回率R',
'metrics/mAP50(B)': '平均值P精度map',
'metrics/mAP50-95(B)': '精度map95',
'lr/pg_sum': '损失函数值loss'
}[metric], fontproperties=font) # 更新y轴标签
plt.legend(prop=font)
plt.grid(True)
plt.savefig(os.path.join(folder, filename))
plt.show()
# 自定义颜色、大小、粗细
colors = ['black', 'r', 'g', 'b', (255, 218, 185), 'purple'] # 黑色、红色、绿色、蓝色
linewidths = [2, 2, 2, 2, 1, 1] # 线宽
# 一
linestyles = [':','-', '--', '-.', (0, (3, 1, 1, 1)), (0, (3, 5, 1, 5))] # :dotted点线、-实线solid、--虚线dashed、-.点划线dashdot、
'''(0, (3, 5, 1, 5)):
第一个元素0通常表示一个连续的线条,但是在这个上下文中,它可能被忽略或者不被正确使用。
第二个元素3是虚线的长度。
第三个元素5是虚线之间的间隙长度。
第四个元素1是下一个虚线的长度。
第五个元素5是下一个间隙的长度。
这意味着线条将由三个点的实线和接下来的五个点的空白组成,然后是一个点的实线和接下来的五个点的空白,以此类推。'''
'''
# 二
linestyles = [':', '-', '--', '-.', '-', '-'] # 使用实线作为基础线型
markers = ['', '+', '*', '', '', ''] # 使用标记来模拟特殊效果
'''
# 指定的文件夹路径
output_folder = 'runs/train_v8_mtYAWDDceshi/loss/dbt/2'
# 绘制对比图并保存到指定文件夹
plot_comparison_final(dataframes, 'metrics/precision(B)', 'Precision(B) 对比图', output_folder, 'precision_comparison.png',
colors, linewidths, linestyles)
plot_comparison_final(dataframes, 'metrics/recall(B)', 'Recall(B)对比图', output_folder, 'recall_comparison.png', colors,
linewidths, linestyles)
plot_comparison_final(dataframes, 'metrics/mAP50(B)', 'mAP50', output_folder, 'map50_comparison.png',
colors, linewidths, linestyles)
plot_comparison_final(dataframes, 'metrics/mAP50-95(B)', '', output_folder, 'map50_95_comparison.png',
colors, linewidths, linestyles)
# 计算 pg0+pg1+pg2 并绘制对比图
for df in dataframes:
df['lr/pg_sum'] = df['lr/pg0'] + df['lr/pg1'] + df['lr/pg2']
# df['lr/pg_sum'] = df['lr/pg0']
plot_comparison_final(dataframes, 'lr/pg_sum', '', output_folder, 'pg_sum_comparison.png', colors,
linewidths, linestyles)
1.1
import os
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties
import numpy as np
# 读取文件
file_paths = [
'runs/train_v8_YD/v8n.csv',
'runs/train_v8_YD/v8n2.csv',
'runs/train_v8_YD/v8n-C2f-CloAtt.csv',
'runs/train_v8_YD/v8n-LSCD.csv'
]
# 加载数据并清理列名
dataframes = [pd.read_csv(file_path) for file_path in file_paths]
for df in dataframes:
df.columns = df.columns.str.strip()
# 尝试的字体文件路径列表
font_paths = [
'/usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf',
'/usr/share/fonts/truetype/liberation/LiberationSans-Regular.ttf',
'C:\\Windows\\Fonts\\msyh.ttc', # 微软雅黑字体,Windows 系统
'C:\\Windows\\Fonts\\simsun.ttc' # 黑体字体,Windows 系统
]
# 找到可用的字体文件路径
for path in font_paths:
if os.path.exists(path):
font_path = path
break
else:
raise FileNotFoundError("未找到支持中文的字体文件,请指定一个存在的字体文件路径。")
# 指定找到的字体
font = FontProperties(fname=font_path)
# 更新绘图函数,加入颜色、大小、粗细的自定义功能,以及保存到指定文件夹的功能
def plot_comparison_final(dataframes, metric, title, folder, filename, colors=None, linewidths=None, linestyles=None):
# 如果文件夹不存在,则创建文件夹
if not os.path.exists(folder):
os.makedirs(folder)
plt.figure(figsize=(10, 6))
for i, df in enumerate(dataframes):
file_name_without_extension = file_paths[i].split('/')[-1].split('.')[0]
color = colors[i] if colors else None
linewidth = linewidths[i] if linewidths else None
linestyle = linestyles[i] if linestyles else None
plt.plot(df['epoch'], df[metric], label=file_name_without_extension, color=color, linewidth=linewidth,
linestyle=linestyle)
plt.title(title, fontproperties=font)
plt.xlabel('Epoch', fontproperties=font)
plt.ylabel({
'metrics/precision(B)': '精准率P',
'metrics/recall(B)': '召回率R',
'metrics/mAP50(B)': '平均值P精度map',
'metrics/mAP50-95(B)': '精度map95',
'lr/pg_sum': '损失函数值loss'
}[metric], fontproperties=font) # 更新y轴标签
plt.legend(prop=font)
plt.grid(True)
plt.savefig(os.path.join(folder, filename))
plt.show()
# 自定义颜色、大小、粗细
colors = ['black', 'r', 'g', 'b'] # 黑色、红色、绿色、蓝色
linewidths = [2, 2, 2, 2] # 线宽
linestyles = [':','-', '--', '-.'] # +-、实线、虚线、点划线
# 指定的文件夹路径
output_folder = 'runs/train_v8_YD/dbt'
# 绘制对比图并保存到指定文件夹
plot_comparison_final(dataframes, 'metrics/precision(B)', 'Precision(B) 对比图', output_folder, 'precision_comparison.png',
colors, linewidths, linestyles)
plot_comparison_final(dataframes, 'metrics/recall(B)', 'Recall(B)对比图', output_folder, 'recall_comparison.png', colors,
linewidths, linestyles)
plot_comparison_final(dataframes, 'metrics/mAP50(B)', 'mAP50', output_folder, 'map50_comparison.png',
colors, linewidths, linestyles)
plot_comparison_final(dataframes, 'metrics/mAP50-95(B)', '', output_folder, 'map50_95_comparison.png',
colors, linewidths, linestyles)
# 计算 pg0+pg1+pg2 并绘制对比图
for df in dataframes:
df['lr/pg_sum'] = df['lr/pg0'] + df['lr/pg1'] + df['lr/pg2']
# df['lr/pg_sum'] = df['lr/pg0']
plot_comparison_final(dataframes, 'lr/pg_sum', '', output_folder, 'pg_sum_comparison.png', colors,
linewidths, linestyles)
四、三无法显示中文
使用了 FontProperties
来指定一个支持中文的字体。这样应该可以解决汉字无法正确显示的问题。您可以根据需要调整其他参数来自定义图表的外观和保存位置
import os
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties
# 读取文件
file_paths = [
'/mnt/data/v8n.csv',
'/mnt/data/v8n2.csv',
'/mnt/data/v8n-C2f-CloAtt.csv'
]
# 加载数据并清理列名
dataframes = [pd.read_csv(file_path) for file_path in file_paths]
for df in dataframes:
df.columns = df.columns.str.strip()
# 尝试的字体文件路径列表
font_paths = [
'/usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf',
'/usr/share/fonts/truetype/liberation/LiberationSans-Regular.ttf',
'C:\\Windows\\Fonts\\msyh.ttc', # 微软雅黑字体,Windows 系统
'C:\\Windows\\Fonts\\simsun.ttc' # 黑体字体,Windows 系统
]
# 找到可用的字体文件路径
for path in font_paths:
if os.path.exists(path):
font_path = path
break
else:
raise FileNotFoundError("未找到支持中文的字体文件,请指定一个存在的字体文件路径。")
# 指定找到的字体
font = FontProperties(fname=font_path)
# 指定支持中文的字体
# font = FontProperties(fname='/usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf')
# 更新绘图函数,加入颜色、大小、粗细的自定义功能,以及保存到指定文件夹的功能
def plot_comparison_final(dataframes, metric, title, folder, filename, colors=None, linewidths=None, linestyles=None):
# 如果文件夹不存在,则创建文件夹
if not os.path.exists(folder):
os.makedirs(folder)
plt.figure(figsize=(10, 6))
for i, df in enumerate(dataframes):
file_name_without_extension = file_paths[i].split('/')[-1].split('.')[0]
color = colors[i] if colors else None
linewidth = linewidths[i] if linewidths else None
linestyle = linestyles[i] if linestyles else None
plt.plot(df['epoch'], df[metric], label=file_name_without_extension, color=color, linewidth=linewidth, linestyle=linestyle)
plt.title(title, fontproperties=font)
plt.xlabel('Epoch', fontproperties=font)
plt.ylabel({
'metrics/precision(B)': '精准率P',
'metrics/recall(B)': '召回率R',
'metrics/mAP50-95(B)': '精度map',
'lr/pg_sum': '损失函数值loss'
}[metric], fontproperties=font) # 更新y轴标签
plt.legend(prop=font)
plt.grid(True)
plt.savefig(os.path.join(folder, filename))
plt.show()
# 自定义颜色、大小、粗细
colors = ['r', 'g', 'b'] # 红色、绿色、蓝色
linewidths = [2, 2, 2] # 线宽
linestyles = ['-', '--', '-.'] # 实线、虚线、点划线
# 指定的文件夹路径
output_folder = '/mnt/data/comparison_charts'
# 绘制对比图并保存到指定文件夹
plot_comparison_final(dataframes, 'metrics/precision(B)', 'Precision(B) 对比图', output_folder, 'precision_comparison.png', colors, linewidths, linestyles)
plot_comparison_final(dataframes, 'metrics/recall(B)', 'Recall(B) 对比图', output_folder, 'recall_comparison.png', colors, linewidths, linestyles)
plot_comparison_final(dataframes, 'metrics/mAP50-95(B)', 'mAP50-95(B) 对比图', output_folder, 'map50_95_comparison.png', colors, linewidths, linestyles)
# 计算 pg0+pg1+pg2 并绘制对比图
for df in dataframes:
df['lr/pg_sum'] = df['lr/pg0'] + df['lr/pg1'] + df['lr/pg2']
plot_comparison_final(dataframes, 'lr/pg_sum', 'pg0+pg1+pg2 对比图', output_folder, 'pg_sum_comparison.png', colors, linewidths, linestyles)
二、这个代码包括了自定义线条颜色、大小、粗细的功能,以及将图表保存到指定文件夹的功能
import pandas as pd
import matplotlib.pyplot as plt
import os
# 读取文件
file_paths = [
'runs/train_v8_YD/v8n.csv',
'runs/train_v8_YD/v8n2.csv',
'runs/train_v8_YD/v8n-C2f-CloAtt.csv'
]
# 加载数据并清理列名
dataframes = [pd.read_csv(file_path) for file_path in file_paths]
for df in dataframes:
df.columns = df.columns.str.strip()
# 更新绘图函数,加入保存到指定文件夹的功能
def plot_comparison_save_to_folder(dataframes, metric, title, folder, filename, colors=None, linewidths=None, linestyles=None):
# 如果文件夹不存在,则创建文件夹
if not os.path.exists(folder):
os.makedirs(folder)
# 更新绘图函数,加入颜色、大小、粗细的自定义功能
def plot_comparison_customized(dataframes, metric, title, filename, colors=None, linewidths=None, linestyles=None):
plt.figure(figsize=(10, 6))
for i, df in enumerate(dataframes):
file_name_without_extension = file_paths[i].split('/')[-1].split('.')[0]
color = colors[i] if colors else None
linewidth = linewidths[i] if linewidths else None
linestyle = linestyles[i] if linestyles else None
plt.plot(df['epoch'], df[metric], label=file_name_without_extension, color=color, linewidth=linewidth, linestyle=linestyle)
plt.title(title)
plt.xlabel('Epoch')
plt.ylabel(metric)
plt.legend()
plt.grid(True)
plt.savefig(filename)
plt.show()
# 自定义颜色、大小、粗细
colors = ['r', 'g', 'b'] # 红色、绿色、蓝色
linewidths = [2, 2, 2] # 线宽
linestyles = ['-', '--', '-.'] # 实线、虚线、点划线
# 绘制对比图metrics/mAP50(B)
plot_comparison_customized(dataframes, 'metrics/precision(B)', 'Precision', 'runs/train_v8_YD/dbt/precision_comparison_customized.png', colors, linewidths, linestyles)
plot_comparison_customized(dataframes, 'metrics/recall(B)', 'Recall', 'runs/train_v8_YD/dbt/recall_comparison_customized.png', colors, linewidths, linestyles)
plot_comparison_customized(dataframes, 'metrics/mAP50(B)', 'mAP50', 'runs/train_v8_YD/dbt/map50_comparison_customized.png', colors, linewidths, linestyles)
plot_comparison_customized(dataframes, 'metrics/mAP50-95(B)', 'mAP50-95', 'runs/train_v8_YD/dbt/map50-95_comparison_customized.png', colors, linewidths, linestyles)
# 计算 pg0+pg1+pg2 并绘制对比图
for df in dataframes:
df['lr/pg_sum'] = df['lr/pg0'] + df['lr/pg1'] + df['lr/pg2']
plot_comparison_customized(dataframes, 'lr/pg_sum', 'Loss', 'runs/train_v8_YD/dbt/pg_sum_comparison_customized.png', colors, linewidths, linestyles)
三:Y轴错误
此外,我还更新了y轴标签为 A、B、C 和 D
y坐标轴标签更新错误,坐标轴标签中使用A表示metrics/precision(B),使用B表示metrics/recall(B)、使用C表示metrics/mAP50-95(B)、使用D表示lr/pg_sum
简约:
更新y轴标签。对于每个指标,我们将使用以下标签:
metrics/precision(B)
对应 精准率Pmetrics/recall(B)
对应 召回率Rmetrics/mAP50-95(B)
对应 Clr/pg_sum
对应 D
import os
import pandas as pd
import matplotlib.pyplot as plt
# 读取文件
file_paths = [
'/mnt/data/v8n.csv',
'/mnt/data/v8n2.csv',
'/mnt/data/v8n-C2f-CloAtt.csv'
]
# 加载数据并清理列名
dataframes = [pd.read_csv(file_path) for file_path in file_paths]
for df in dataframes:
df.columns = df.columns.str.strip()
# 更新绘图函数,加入颜色、大小、粗细的自定义功能,以及保存到指定文件夹的功能
def plot_comparison_final(dataframes, metric, title, folder, filename, colors=None, linewidths=None, linestyles=None):
# 如果文件夹不存在,则创建文件夹
if not os.path.exists(folder):
os.makedirs(folder)
plt.figure(figsize=(10, 6))
for i, df in enumerate(dataframes):
file_name_without_extension = file_paths[i].split('/')[-1].split('.')[0]
color = colors[i] if colors else None
linewidth = linewidths[i] if linewidths else None
linestyle = linestyles[i] if linestyles else None
plt.plot(df['epoch'], df[metric], label=file_name_without_extension, color=color, linewidth=linewidth, linestyle=linestyle)
plt.title(title)
plt.xlabel('Epoch')
plt.ylabel({
'metrics/precision(B)': '精准率P',
'metrics/recall(B)': '召回率R',
'metrics/mAP50-95(B)': '精度map',
'lr/pg_sum': '损失函数值loss'
}[metric]) # 更新y轴标签
plt.legend()
plt.grid(True)
plt.savefig(os.path.join(folder, filename))
plt.show()
# 自定义颜色、大小、粗细
colors = ['r', 'g', 'b'] # 红色、绿色、蓝色
linewidths = [2, 2, 2] # 线宽
linestyles = ['-', '--', '-.'] # 实线、虚线、点划线
# 指定的文件夹路径
output_folder = '/mnt/data/comparison_charts'
# 绘制对比图并保存到指定文件夹
plot_comparison_final(dataframes, 'metrics/precision(B)', 'Precision(B) 对比图', output_folder, 'precision_comparison.png', colors, linewidths, linestyles)
plot_comparison_final(dataframes, 'metrics/recall(B)', 'Recall(B) 对比图', output_folder, 'recall_comparison.png', colors, linewidths, linestyles)
plot_comparison_final(dataframes, 'metrics/mAP50-95(B)', 'mAP50-95(B) 对比图', output_folder, 'map50_95_comparison.png', colors, linewidths, linestyles)
# 计算 pg0+pg1+pg2 并绘制对比图
for df in dataframes:
df['lr/pg_sum'] = df['lr/pg0'] + df['lr/pg1'] + df['lr/pg2']
plot_comparison_final(dataframes, 'lr/pg_sum', 'pg0+pg1+pg2 对比图', output_folder, 'pg_sum_comparison.png', colors, linewidths, linestyles)