python/matplotlib画图
一个画布上画多个三维子图
import matplotlib
import matplotlib.pyplot as plt
import numpy as np
x1 = np.random.randn(5,3,2)
fig = plt.figure()
ax1 = fig.add_subplot(121,projection='3d') #这里的121的意思就是,子图排列是1行2列,本子图在1号位置
ax2 = fig.add_subplot(122,projection='3d') #这里的121的意思就是,子图排列是1行2列,本子图在2号位置
for idx, frame in enumerate(x):
ax1.scatter3D(frame[0,0],frame[1,0],frame[2,0],color='r')
ax2.scatter3D(frame[0,1],frame[1,1],frame[2,1],color='b')
将子图/画布动态清空
import matplotlib
import matplotlib.pyplot as plt
import numpy as np
x = np.random.randn(64,3,2)
fig = plt.figure()
ax1 = fig.add_subplot(121,projection='3d')
ax2 = fig.add_subplot(122,projection='3d')
for idx, frame in enumerate(x):
ax1.scatter3D(frame[0,0],frame[1,0],frame[2,0],color='r')
ax2.scatter3D(frame[0,1],frame[1,1],frame[2,1],color='b')
ax1.cla() #清空ax1(即上图左侧子图)
ax2.cla() #清空ax2(即上图右侧子图)
通过上面的方法就可以在循环中动态清空坐标中的数据。除了这个方法还有其他方法
不显示画布保存图片
使用 matplotlib.use(‘agg’)
import matplotlib
import matplotlib.pyplot as plt
import numpy as np
matplotlib.use('agg') #写上这句即可在下面的绘图中不显示画布
x = np.random.randn(4,3,2)
fig = plt.figure()
ax1 = fig.add_subplot(121,projection='3d')
ax2 = fig.add_subplot(122,projection='3d')
for idx, frame in enumerate(x):
ax1.scatter3D(frame[0,0],frame[1,0],frame[2,0],color='r')
ax2.scatter3D(frame[0,1],frame[1,1],frame[2,1],color='b')
fig.savefig('test'+str(idx)+'.jpg') #这里是保存画布fig
ax1.cla()
ax2.cla()