Я использую windows python3, чтобы нарисовать одну фигуру, и использую plt.savefig для ее сохранения, но он показывает мне ошибку: на устройстве не осталось места. Это может дать мне цифру, когда я не использую plt.savefig. У кого-то раньше была такая проблема? Вот коды:
def f_ellipse(a,b,c,d,e,f):
ta = b**2 - 4*a*c
x0 = (b*e-2*c*d)/ta
y0 = (b*d-2*a*e)/ta
r = a * pow(x0,2) + b * x0 * y0 + c * pow(y0,2) + f
aa = np.sqrt(r / a)
bb = np.sqrt(-4 * a * r / ta)
t = np.linspace(0, 2 * np.pi, 60)
A = np.array([[1,-b/(2*a)],[0,1]])
B = np.zeros([2,60])
for i in range(0,60):
B[0,i] = aa*np.cos(t[i])
B[1,i] = bb*np.sin(t[i])
xy0 = A.dot(B)
ellipse = np.zeros([2,xy0.shape[1]])
ellipse[0,:] = xy0[0,:]-x0
ellipse[1,:] = xy0[1,:]-y0
return ellipse
sigma22 = 7.424e-8
sigma12 = -3.797e-7
sigma11 = 3.209e-6
emittance = 3.067e-7
limit_x = 0.00179
sigma_quadstr = np.array([[160,0.343],[170,0.291],[180,0.248],[190,0.216],[200,0.207],[210,0.229],[220,0.277],[230,0.338]])
sigma = sigma_quadstr[:,1]*1e-3
quad_strength = np.sqrt(sigma_quadstr[:,0]/1000 * 36.56) * 0.1
## tangent line
R11 = np.cos(quad_strength)-1.16*quad_strength/0.1*np.sin(quad_strength)
R12 = 1/(quad_strength/0.1)*np.sin(quad_strength)+1.16*np.cos(quad_strength)
x0 = np.arange(-1.5*limit_x,1.5*limit_x,limit_x/100)
x0p = np.zeros([x0.shape[0],sigma.shape[0]])
for i in range(0,sigma.shape[0]):
x0p[:,i] = (sigma[i] - x0 * R11[i]) / R12[i]
F_para = f_ellipse(sigma22,-2*sigma12,sigma11,0,0,emittance**2)
fig1 = plt.figure(1)
plt.plot(F_para[0,:],F_para[1,:],c='k',label='fitting ellipse') # emittance from fitting
for i in range(0,sigma.shape[0]):
string = 'quad. current ' + str(sigma_quadstr[i,0]) + ' mA'
plt.plot(x0, x0p[:, i],label=string)
plt.legend()
plt.xlabel('position / mm')
plt.ylabel('angle / mrad')
# plt.xlim(2*np.min(F_para[0,:]),2*np.max(F_para[0,:]))
# plt.ylim(2*np.min(F_para[1,:]),2*np.max(F_para[1,:]))
plt.savefig('1.jpg',dpi=100, bbox_inches='tight')
plt.show()