Как сохранить фрейм данных pandas в существующий PDF-файл из PdfPages

Я создал PDF-файл, в котором сохранены несколько графиков, созданных с помощью Matplotlib.

Я сделал следующее, чтобы создать PDF

from matplotlib.backends.backend_pdf import PdfPages
report = PdfPages('report.pdf')

После создания сюжета я каждый раз делал этот report.savefig(). Однако я также хочу вывести созданные мной фреймы данных в PDF. По сути, я хочу, чтобы отчет содержал графики и запрошенные фреймы данных в одном месте. Можно ли добавить фрейм данных в PDF-файл, используя фрейм, созданный с помощью PdfPages, и если да, как мне это сделать? Если нет, то есть ли другой подход, который позволил бы графикам и фреймворку быть в одном месте (без необходимости сохранять отдельные компоненты и собирать их вместе)? Будем рады любым предложениям и примерам. Спасибо!

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
4
0
6 265
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Просто создайте график таблицы и сохраните его. Учитывая такой фрейм данных, как:

import pandas as pd

df = pd.DataFrame()
df['Animal'] = ['Cow', 'Bear']
df['Weight'] = [250, 450]
df['Favorite'] = ['Grass', 'Honey']
df['Least Favorite'] = ['Meat', 'Leaves']

что выглядит так:

  Animal  Weight Favorite Least Favorite
0    Cow     250    Grass           Meat
1   Bear     450    Honey         Leaves

вы можете построить его табличную версию следующим образом:

import matplotlib.pyplot as plt

fig = plt.figure(figsize=(9,2))
ax = plt.subplot(111)
ax.axis('off')
ax.table(cellText=df.values, colLabels=df.columns, bbox=[0,0,1,1])

Вывод:

Вы можете сделать графику таблицы более красивым, добавив цвет фона к ячейкам:

import matplotlib.pyplot as plt

fig = plt.figure(figsize=(9,2))
ax=plt.subplot(111)
ax.axis('off')
c = df.shape[1]
ax.table(cellText=np.vstack([df.columns, df.values]), cellColours=[['lightgray']*c] + [['none']*c]*2, bbox=[0,0,1,1])

Вывод:

См. Этот текущая нить (из которого были взяты все эти примеры) для получения дополнительных идей / вариантов.

Редактировать

Мне пришло в голову, что вы, возможно, захотите нанести изображения и таблицы на один и тот же рисунок. Вы можете сделать это, чтобы получить такие результаты:

Вот ссылка на учебник, откуда взялось изображение, в котором есть пример кода, который поможет вам начать работу.

Что происходит, если размер df большой, скажем 2000

sahasrara62 18.12.2018 08:50

Тогда вам придется быть осторожным со своими размерами и, возможно, разбить таблицу на несколько страниц. Вы можете изменить размер фигуры, чтобы заполнить лист обычной бумаги 8,5 x 11 (или, предположительно, одну стандартную страницу pdf), создав ее так: plt.figure(figsize=(7.5, 10)). Это дает вам все, кроме поля в 1 дюйм (что должно быть разумным), чтобы заполнить как можно больше.

tel 18.12.2018 08:54

Я предполагаю, что сохранение этих больших данных в PDF-формате может быть само собой.

sahasrara62 18.12.2018 09:00

Спасибо за вашу помощь! Что делает ax.subplot(111)? Также можно ли улучшить разрешение? Мой очень расплывчатый.

Jane Sully 18.12.2018 09:01
ax = plt.subplot(111) - это лишь один из многих способов создания нового объекта Axes для печати. Вы можете заменить его на ax = fig.gca(), и в этом случае не будет никакой разницы.
tel 18.12.2018 09:13

Не уверен, почему у вас расплывчатый результат. Я бы порекомендовал попробовать использовать аргумент figsize. Вы также можете попробовать напрямую установить параметр глобального разрешения изображения следующим образом: plt.rcParams['figure.dpi'] = 200. Но в любом случае это не должно сильно повлиять на вывод PDF.

tel 18.12.2018 09:13

так как же включить эти графики в файл pdf? Что это за команда? Это report.savefig (ax.table ())

Nguai al 24.01.2019 20:42

Другие вопросы по теме