Я создал PDF-файл, в котором сохранены несколько графиков, созданных с помощью Matplotlib.
Я сделал следующее, чтобы создать PDF
from matplotlib.backends.backend_pdf import PdfPages
report = PdfPages('report.pdf')
После создания сюжета я каждый раз делал этот report.savefig()
. Однако я также хочу вывести созданные мной фреймы данных в PDF. По сути, я хочу, чтобы отчет содержал графики и запрошенные фреймы данных в одном месте. Можно ли добавить фрейм данных в PDF-файл, используя фрейм, созданный с помощью PdfPages, и если да, как мне это сделать? Если нет, то есть ли другой подход, который позволил бы графикам и фреймворку быть в одном месте (без необходимости сохранять отдельные компоненты и собирать их вместе)? Будем рады любым предложениям и примерам. Спасибо!
Просто создайте график таблицы и сохраните его. Учитывая такой фрейм данных, как:
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])
Вывод:
См. Этот текущая нить (из которого были взяты все эти примеры) для получения дополнительных идей / вариантов.
Мне пришло в голову, что вы, возможно, захотите нанести изображения и таблицы на один и тот же рисунок. Вы можете сделать это, чтобы получить такие результаты:
Вот ссылка на учебник, откуда взялось изображение, в котором есть пример кода, который поможет вам начать работу.
Тогда вам придется быть осторожным со своими размерами и, возможно, разбить таблицу на несколько страниц. Вы можете изменить размер фигуры, чтобы заполнить лист обычной бумаги 8,5 x 11 (или, предположительно, одну стандартную страницу pdf), создав ее так: plt.figure(figsize=(7.5, 10))
. Это дает вам все, кроме поля в 1 дюйм (что должно быть разумным), чтобы заполнить как можно больше.
Я предполагаю, что сохранение этих больших данных в PDF-формате может быть само собой.
Спасибо за вашу помощь! Что делает ax.subplot(111)
? Также можно ли улучшить разрешение? Мой очень расплывчатый.
ax = plt.subplot(111)
- это лишь один из многих способов создания нового объекта Axes
для печати. Вы можете заменить его на ax = fig.gca()
, и в этом случае не будет никакой разницы.
Не уверен, почему у вас расплывчатый результат. Я бы порекомендовал попробовать использовать аргумент figsize
. Вы также можете попробовать напрямую установить параметр глобального разрешения изображения следующим образом: plt.rcParams['figure.dpi'] = 200
. Но в любом случае это не должно сильно повлиять на вывод PDF.
так как же включить эти графики в файл pdf? Что это за команда? Это report.savefig (ax.table ())
Что происходит, если размер df большой, скажем 2000