通过下面的代码,我制作了一个我希望用pdf保存的图。我使用savefig
命令:
fig.savefig("Surface_I.pdf" )
pdf文件在left
和up
中包含大量空格:
fig.savefig("Surface_I.pdf", bbox_inches='tight')
解决方案会删除一些x
和z
信息,而不会从left
和top
中删除太多空间:
fig.savefig("Surface_I.pdf", bbox_inches='tight', pad_inches=0.3)
解决方案会增加一些空间,修复刚删除的信息:
但left
和top
中仍有太多空间。
如何从pdf中移除或修剪所有left
和top
空格?
注意:所有这些图片都是pdf生成的屏幕截图。
代码:
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
# Function:
z_fit = a0 + a1*yy + a2*xx + a3*yy**2 + a4*xx**2 + a5*xx*yy
# Parameters:
a0 = -941.487789948
a1 = 0.0146881652963
a2 = -2.53533353374e-05
a3 = -9.64343252786e-05
a4 = -2.47416662598e-08
a5 = 3.77136886946e-07
x_mesh = np.linspace(10.0000000000000, 2000.0000000000000, 20)
y_mesh = np.linspace(-4.4119598462100, 10.8557347078000, 20)
xx, yy = np.meshgrid(x_mesh, y_mesh)
# Plot the function
fig = plt.figure()
ax = fig.gca(projection='3d')
ax.plot_surface(xx, yy, z_fit, color='b', alpha=0.5)
ax.set_xlabel('\nx')
ax.set_ylabel('y')
ax.set_zlabel('\nzzzzz zzz', linespacing=3)
ax.set_title('\n\nSurface I', linespacing=3)
xlabels=[0, 250, 500, 750, 1000, 1250, 1500, 1750, 2000]
ax.set_xticklabels(xlabels,rotation=90,
verticalalignment='baseline',#)#,
horizontalalignment='left')
ylabels = [-4, -2, 0, 2, 4, 6, 8, 10]
ax.set_yticklabels(ylabels,rotation=0,
verticalalignment='baseline')#,
# horizontalalignment='left')
fig.savefig("Surface_I.pdf", bbox_inches='tight', pad_inches=0.3)
答案 0 :(得分:0)
尝试更改下面代码中的列表边框(border = [xmin,ymin,xmax,ymax]在数字设备坐标中) 创建一个大小边框列表的轴ax0有点棘手 并在里面添加3d图形的轴。 尝试使用border = [-0.5,0,1.5,1]你将理解这个列表的作用
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
# Parameters:
a0 = -941.487789948
a1 = 0.0146881652963
a2 = -2.53533353374e-05
a3 = -9.64343252786e-05
a4 = -2.47416662598e-08
a5 = 3.77136886946e-07
x_mesh = np.linspace(10.0000000000000, 2000.0000000000000, 20)
y_mesh = np.linspace(-4.4119598462100, 10.8557347078000, 20)
xx, yy = np.meshgrid(x_mesh, y_mesh)
# Function:
z_fit = a0 + a1*yy + a2*xx + a3*yy**2 + a4*xx**2 + a5*xx*yy
def axesborder(border):
# border = [xmin,ymin,xmax,ymax]
# return [xmin,ymin,dx,dy]
return [border[0],border[1],border[2]-border[0],border[3]-border[1]]
# Plot the function
fig = plt.figure(1)
fig.set_size_inches((16,9), forward=True)
border = [-0.1,0,1.05,1]
#border = [0,0,1,1]
ax0 = fig.add_axes(axesborder(border))
ax0.set_axis_off()
ax = fig.add_axes(ax0.get_position(),projection='3d',zorder = 1)
ax.plot_surface(xx, yy, z_fit, color='b', alpha=0.5)
ax.set_xlabel('\nx')
ax.set_ylabel('y')
ax.set_zlabel('\nzzzzz zzz', linespacing=3)
ax.set_title('\n\nSurface I', linespacing=3)
xlabels=[0, 250, 500, 750, 1000, 1250, 1500, 1750, 2000]
ax.set_xticklabels(xlabels,rotation=90,
verticalalignment='baseline',#)#,
horizontalalignment='left')
ylabels = [-4, -2, 0, 2, 4, 6, 8, 10]
ax.set_yticklabels(ylabels,rotation=0,verticalalignment='baseline')
plt.show()
plt.savefig('test.pdf')
答案 1 :(得分:0)
我像这样手动裁剪生成的pdf图:
pdfcrop --margins '0 0 0 0' input.pdf output.pdf
来自pdfcrop
帮助消息:
--margins "<left> <top> <right> <bottom>"
如果需要裁剪许多图,则可以编写一个简单的bash脚本来自动化该过程。整个解决方案有点难看,但是可以用。