我目前正在尝试将Python绘制的图形存储为矢量图,以改善它们在LaTeX文档中的外观。对于一维图形,这个方法效果很好:
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')
这样我就可以在Inkscape中打开svg文件并将其转换为pdf/pdf_tex,绘图中的每个文本都将在文档中以latex格式呈现-->与文档中其他地方相同的字体和字号。
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 MB)。但是,文本被存储为文本。
不幸的是,我现在无法在inkscape中打开pdf文件,因为它总是在一段时间后崩溃。可能文件已经太大了。有什么建议吗?在这种情况下进一步降采样可能有效,但在一般情况下可能不起作用。
imshow
而不是pcolormesh
。 - ypnos