matplotlib:创建具有大数据帧的多页pdf



我想创建一个包含多个页面的pdf,其中每个页面都包含一个表。我有一个大的数据帧,我正在拆分为多个子数据帧,并且我试图在pdf中为每个子数据帧各有一个页面。

from matplotlib.backends.backend_pdf import PdfPages
import matplotlib.pyplot as plt
df = pd.DataFrame(np.random.randint(0,100,size=(150, 4)), columns=list('ABCD'))
df_list = np.array_split(df, 3)
with PdfPages('multipage_output_pdf.pdf') as pdf:
for table in df_list:
fig = plt.figure(figsize=(11.69,8.27))
ax = fig.add_subplot(111)
for row in range(len(table)):
cell_text.append(table.iloc[row])
ax.table(cellText=cell_text, colLabels=table.columns, loc='center')
ax.axis('off')
pdf.savefig(fig)
pdf.close()

我尝试了上面的代码,但在输出pdf中只得到一个页面(只有一个子数据帧(。我应该如何在pdf中显示所有数据帧?

问题是cell_text在每次循环后都不会重置为空列表,因此每个连续的表也会包括前一个表。无论如何,实际上不需要cell_text,因为可以使用table.values访问单元值。

在下面的示例中,图形尺寸被切换为具有A4页面的纵向方向,以适应单个页面上的表格。此外,该列还改进了表格的格式。pyplot接口仅用于简化代码。

import numpy as np               # v 1.19.2
import pandas as pd              # v 1.2.3
import matplotlib.pyplot as plt  # v 3.3.4
from matplotlib.backends.backend_pdf import PdfPages
df = pd.DataFrame(np.random.randint(0, 100, size=(150, 4)), columns=list('ABCD'))
df_list = np.array_split(df, 3)
with PdfPages('multipage_output_pdf.pdf') as pdf:
for table in df_list:
plt.figure(figsize=(8.27, 11.69))
plt.table(cellText=table.values, colLabels=table.columns, loc='center',
colWidths=[0.1 for col in range(df.columns.size)])
plt.axis('off')
pdf.savefig()
plt.close()

参考:用户回答3226167

最新更新