Python如何把很多张图片保存到pdf中,并给每张图片打上一个标签

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import statsmodels.api as sm
from scipy.stats import pearsonr
from matplotlib.backends.backend_pdf import PdfPages
import PyPDF2
# 假设数据存储在名为 'data.csv' 的文件中
dataFilePath = r'part4-data_bk.csv' # 1月份的数据
data = pd.read_csv(dataFilePath)
data.fillna(0, inplace=True) # nan filled with zero
# 特征列表
features = ['SNA', ....]
# width of chin 的列名
width_of_chin = 'width of chin'
# 创建一个PDF文件
pdf_filename = 'feature_vs_width_of_chin.pdf'
with PdfPages(pdf_filename) as pdf:
# 逐个特征绘制散点图和线性拟合结果
for i, feature in enumerate(features):
# 绘制散点图
plt.figure(figsize=(10, 6))
sns.scatterplot(x=data[feature], y=data[width_of_chin])
# 计算线性拟合
X = sm.add_constant(data[feature]) # 添加常数项
model = sm.OLS(data[width_of_chin], X).fit()
predictions = model.predict(X)
# 计算相关系数
corr, _ = pearsonr(data[feature], data[width_of_chin])
# 绘制线性拟合线
sns.lineplot(x=data[feature], y=predictions, color='red')
# 添加标题和标签
plt.title(f'{feature} vs {width_of_chin}\nLinear Fit: y = {model.params[1]:.2f}x + {model.params[0]:.2f}\nPearson Correlation: {corr:.2f}')
plt.xlabel(feature)
plt.ylabel(width_of_chin)
# 显示图表
# plt.show()
# 保存当前图表到PDF文件
pdf.savefig()
# pdf.bookmarkPage(i, f'{feature} vs {width_of_chin}')
plt.close()
print("所有图表已保存到 feature_vs_width_of_chin.pdf 文件中。")
# 使用PyPDF2添加书签
input_pdf = PyPDF2.PdfReader(pdf_filename)
output_pdf = PyPDF2.PdfWriter()
# 复制所有页面并添加书签
for i in range(len(input_pdf.pages)):
output_pdf.add_page(input_pdf.pages[i])
output_pdf.add_outline_item(f'{features[i]} vs {width_of_chin}', i)
# 保存带书签的PDF文件
with open('feature_vs_width_of_chin_with_bookmarks.pdf', 'wb') as f:
output_pdf.write(f)
print("所有图表已保存到 feature_vs_width_of_chin_with_bookmarks.pdf 文件中,并添加了书签。")