Невозможно центрировать таблицу на PDF-странице при сохранении таблицы matplotib с помощью backend_pdf PdfPages - PullRequest
0 голосов
/ 17 апреля 2020

Я могу сгенерировать таблицу matplotlib (без видимого связанного графика) в блокноте jupyter, но когда я пытаюсь сохранить ее в PDF с помощью внутренней оболочки backend_pdf.PdfPages matplotlib, она никогда не отображается по центру страницы.

Я пробовал возиться с 'top', 'center', 'bottom' и смещениями и savefig(pad_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: enter image description here

снимок экрана вывода Jupyter ( обратите внимание на большое пустое место после таблицы) enter image description here

1 Ответ

1 голос
/ 18 апреля 2020

Использование loc='center' должно решить эту проблему, и для минимального примера, о котором идет речь,

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"]
data = np.random.randint(100, size=(40,6)).astype('str')

fig, ax = plt.subplots(1, figsize=(10,10))
ax.axis('off')
_table = plt.table(cellText=data, colLabels=col_names, 
                   loc='center', edges='open', colLoc='right')

pdf = PdfPages('test.pdf')
pdf.savefig(fig)
pdf.close()

enter image description here

Важно заметьте, однако, что это поместит таблицу в «центр» относительно текущего Axes экземпляра. Вероятно, безопаснее использовать версию matplotlib.axes.Axes.table, если вы используете несколько вспомогательных участков, поскольку она позволяет более точно контролировать, какой Axes используется.


Примечание - я проверил это в Matplotlib 2.2.5 и 3.2.1, если приведенный выше код дает результат, который я показал, рассмотрите возможность обновления вашей установки Matplotlib.

...