создать файл, содержащий распечатки и графики - PullRequest
1 голос
/ 26 января 2020

У меня есть список фреймов данных и список jsons, я хочу получить графики df и jsons в один красивый файл (pdf или jpeg), поэтому я добавил json в качестве заголовка графика, и это работает достаточно хорошо для коротких строк (см. ниже), но это проблематично c с более длинными jsons, и я хотел бы добавить их как простые печатные издания, а не заголовки, какие-нибудь идеи?

Вот что у меня есть:

lodf = [pd.DataFrame([-1*x for x in range(20)]), pd.DataFrame(range(20))]
fig = plt.figure(figsize=[16,2*len(lodf)])

for i, df0 in enumerate(lodf):
    ax = fig.add_subplot(len(lodf), 1, i+1)
    df0.plot(style='.', ms=8, ax=ax)
    ax.set_ylabel("YYY")
    ax.set_title('I want this as a print out since it is a long json', wrap=True)

plt.subplots_adjust(left=None, bottom=None, right=None, top=None, wspace=None, hspace=0.6)
plt.savefig('just_an_example.pdf')

, что дает:

enter image description here

1 Ответ

1 голос
/ 02 февраля 2020

Одним из подходов было бы использование среды LaTex tabular для управления переносом, что-то вроде этого

import matplotlib.pyplot as plt
import numpy as np
from matplotlib import rcParams
rcParams["text.usetex"] = True

figsize = [10, 6]
plt.figure(figsize=figsize)
string = "string string string string string string string string string "
strings = [string]
for i in range(1, 6):
    strings.append(strings[i-1]+string)

plt.title(r'\begin{tabular}{p{'+str(figsize[0])+'in}} '+strings[5]+' \end{tabular}')
plt.show()

Обернул бы заголовок на границах рисунка:

enter image description here

Конечно, это не самый простой способ переноса текста (см. этот ответ ), но это обеспечивает более точное управление форматированием, чем в большинстве других методов. , Например, если вы хотите отформатировать некоторый код, вы можете сделать следующее

figsize = [10, 6]
plt.figure(figsize=figsize)
code = 'def function(arg1, arg2, arg3, kwarg1=None, kwarg2=None): \n\t print(arg1) '+
       '\n\t print(arg2) \n\t print(arg3)'
table = code.replace("\n", "\\\\").replace("\t", "\hspace{1cm}")
plt.title(r'\ttfamily \begin{tabular}{p{'+str(figsize[0])+'in}}'+table+'\end{tabular}')
plt.show()

, что дает

enter image description here

Причина I Я использую метод LaTex, который позволяет более расширенное форматирование строк - позволяет форматировать код как код в любом текстовом методе matplotlib (title(), xlabel() / ylabel(), text() и т. д. c).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...