python - 在 for 循环中绘制覆盖
问题描述
我正在使用 FeniCS 在不同的时间步长求解 PDE,然后将其存储到各种列表中并使用 matplotlib 在 python 中绘图。我在尝试在循环中创建和保存多个(三个)图时遇到问题。我只能设法保存一个情节而不会覆盖它们。忽略必要的细节,我的代码看起来像这样
for n in range(num_steps):
#Update current time
t += dt
#Solve
solve(a_form == L_form, u)
#Store times
t_vals.append(t)
#Solve PDE, gives solution u
solve(u)
#Create empty lists
u_vals_x = []
u_vals_y = []
u_vals_z = []
#Set constant
xyz_fixed_density = 1000
#Store u values varying x, y and z held equal to 1
for n in np.linspace(x0,x1,xyz_fixed_density):
u_vals_x.append(u(n,1,1))
#Store u values varying y, x and z held equal to 1
for n in np.linspace(y0,y1,xyz_fixed_density):
u_vals_y.append(u(1,n,1))
#Store u values varying z, x and y held equal to 1
for n in np.linspace(z0,z1,xyz_fixed_density):
u_vals_z.append(u(1,1,n))
#First plot
plt.scatter(np.linspace(x0,x1,xyz_fixed_density),u_vals_x,s=1)
plt.legend(t_vals)
plt.xlabel('$x$')
plt.ylabel('$u(t,x,1,1)$')
plt.savefig('u_vs_x.png')
#Second plot
plt.scatter(np.linspace(y0,y1,xyz_fixed_density),u_vals_y,s=1)
plt.legend(t_vals)
plt.xlabel('$y$')
plt.ylabel('$u(t,1,y,1)$')
plt.savefig('u_vs_y.png')
#Third plot
plt.scatter(np.linspace(z0,z1,xyz_fixed_density),u_vals_z,s=1)
plt.legend(t_vals)
plt.xlabel('$z$')
plt.ylabel('$u(t,1,1,z)$')
plt.savefig('u_vs_z.png')
这可能是一个简单的修复,但我似乎无法让它工作。提前致谢。
解决方案
使用当前迭代 ( n
) 作为文件名的一部分;例如替换
plt.savefig('u_vs_x.png')
和
plt.savefig(f'u_vs_x_{n}.png')
这使用 f-string 语法来格式化代码。如果您使用的是不支持 f 字符串的旧 Python 版本,请format
显式使用:
plt.savefig('u_vs_x_{}.png'.format(n))
您还需要每次都创建一个新图,例如通过
plt.figure()
推荐阅读
- javascript - DOM - javaScript getAttribute
- c# - 如何在 void Update 中执行一次代码?
- java - 字符串格式化程序如果值小于 10,则使用 3 个变量语法以 HH:MM:SS 格式添加前导零 java
- python - 将 lxml.objectify.StringElement 转换为元组时,各个元素仍然是字符串
- python-3.x - 如果 ret 为 True,为什么 cv2.VideoCapture read() 方法不返回帧?
- javascript - React.js - react-player 如何播放本地视频
- macos - Mac动态库中的动态符号表?
- android - 检查云 Firestore 数据库中是否已存在用户名、电子邮件和电话号码数据
- spring-boot - Spring boot Authenticate Rest API using Google OAuth2 以及如何使用 Postman 进行测试
- elm - 野榆反应堆工艺?