В настоящее время я пытаюсь сохранить графики Python как векторную графику, чтобы улучшить их внешний вид в латексном документе.Для 1D графиков это работает довольно хорошо:
import numpy as np
import matplotlib as mpl
mpl.use('svg')
new_rc_params = {
"font.family": 'Times',
"font.size": 12,
"font.serif": [],
"svg.fonttype": 'none'} #to store text as text, not as path
mpl.rcParams.update(new_rc_params)
import matplotlib.pyplot as plt
x = np.linspace(-.5, .5, 1024)
plt.figure()
plt.plot(x, x)
plt.title('\$x = y\$')
plt.xlabel('\$x\$ [m]')
plt.ylabel('\$y\$ [m]')
plt.savefig('test.svg', format = 'svg', bbox_inches = 'tight')
Таким образом, я могу открыть файл svg в inkscape и преобразовать его в pdf / pdf_tex, и каждый текст на графике будет отображаться в латексе внутри документа -> тот же шрифт и размер шрифта, что и везде в документе.
2D-график становится невероятно большим, как svg-файлы.Поэтому я хочу сохранить график в формате PDF (опять же, я хочу сохранить текст как текст. Вот почему я не могу сохранить график как .png):
mpl.use('pdf')
new_rc_params = {
"font.family": 'Times',
"font.size": 12,
"font.serif": []
}
#"svg.fonttype": 'none'} #not needed here since we don't use svg anymore
mpl.rcParams.update(new_rc_params)
import matplotlib.pyplot as plt
x = np.linspace(-.5, .5, 1024)
x, y = np.meshgrid(x, x)
z = np.exp(-(x**2 + y**2))
plt.figure()
plt.title('Gaussian plot: \$z = \exp{-(x^2 + y^2)}\$')
plt.pcolormesh(x, y, z)
plt.colorbar()
plt.savefig('test.pdf', bbox_inches='tight', format='pdf')
При этом 2D-график сохраняется какPDFВ любом случае, сохранение графика занимает некоторое время, и оно становится довольно большим (даже если на графике только 500 x 500 точек, это около 11 МБ).Но текст хранится в виде текста.
К сожалению, я не могу открыть pdf в inkscape, потому что он всегда вылетает через некоторое время.Вероятно, файл уже слишком большой.Какие-либо предложения?В этом случае может сработать дальнейшее понижение частоты дискретизации, но, вероятно, не в целом.