Python 使用后端PDF PdfPages保存matplotib表格时,无法将表格居中放置在PDF页面上

Python 使用后端PDF PdfPages保存matplotib表格时,无法将表格居中放置在PDF页面上,python,matplotlib,pdf,pdfpages,Python,Matplotlib,Pdf,Pdfpages,我可以在jupyter笔记本中生成matplotlib表(没有任何明显关联的绘图),但当我尝试使用matplotlib的内部后端\u PDF.PdfPages包装器将其保存到PDF时,它从来不会出现在页面中央 我试过把'top','center','bottom',偏移量和保存图(pad\u inches)弄得一团糟,但都没用。下面是我的例子: import numpy as np import matplotlib.pyplot as plt from matplotlib.backends.

我可以在jupyter笔记本中生成matplotlib表(没有任何明显关联的绘图),但当我尝试使用matplotlib的内部
后端\u PDF.PdfPages
包装器将其保存到PDF时,它从来不会出现在页面中央

我试过把
'top'
'center'
'bottom'
,偏移量和
保存图(pad\u inches)
弄得一团糟,但都没用。下面是我的例子:

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.backends.backend_pdf import PdfPages

col_names = ["this", "that","the other","4","5","6"]
page_data = np.random.randint(100, size=(40,6))

# stringify numbers: tables can't have ints in them.
for idx, sub in enumerate(page_data):
    page_data[idx] = [str(i) for i in sub]

fig, axs = plt.subplots(1, figsize=(10,8))
axs.axis('off')
_table = plt.table(
    cellText=page_data,
    colLabels=col_names,
    loc='top',
    edges='open',
    colLoc='right')

# and now, the PDF doesn't fit on page    
pdf = PdfPages('test.pdf')
pdf.savefig(fig)
pdf.close()
我的直觉是,仍然有一个看不见的人物占据了空间,这将推高我页面上的所有内容。我如何删除该数字,或将其大小调整为零,并且只使用PDF格式保存表格文本

PDF输出截图:

Jupyter输出的屏幕截图(注意表后的大空格)

使用
loc='center'
应该可以解决这个问题,举个简单的例子,它确实可以解决这个问题

将numpy导入为np
将matplotlib.pyplot作为plt导入
从matplotlib.backends.backend\u pdf导入PdfPages
col_names=[“这个”、“那个”、“另一个”、“4”、“5”、“6”]
data=np.random.randint(100,size=(40,6)).astype('str')
图,ax=plt.子批次(1,figsize=(10,10))
ax.轴(“关闭”)
_table=plt.table(cellText=data,colLabels=col_name,
loc='center',edges='open',colLoc='right')
pdf=PdfPages('test.pdf')
pdf.savefig(图)
pdf.close()

但是,需要注意的是,这将使表格相对于当前
实例位于“中心”。如果使用多个子批次,则使用
matplotlib.axes.axes.table
版本可能更安全,因为它允许对使用的
轴进行更精细的控制



注意  -   我在Matplotlib 2.2.5和3.2.1中进行了测试,如果上面的代码确实产生了我所展示的结果,请考虑更新您的MaMattLIB安装。p> 嗯。嗯,它似乎解决了这个问题。我在我的一次迭代中尝试了
loc='center'
,但其他的东西肯定有所不同,因为当时它没有解决问题。至于第二个问题,这个多页报告的最后一页只有几个条目,在页面中央看起来很奇怪。但是这对
loc='top'
有效,所以我想我可以用一些逻辑来解决它。我注意到我的原始代码是
plt.figure(figsize=(10,8))
但是William已经编辑成
plt.subplot(1,figsize=(10,8))
。在本例中,两者的工作原理相同。