在同一个文件中制作图片和图表的GIF /动画

时间:2017-11-03 13:27:28

标签: python animation matplotlib gif

我在这里寻求一些建议。我有一个数据文件,基本上包含Time,Displacement&强制我从机械实验中记录的项目。在实验过程中,我每2秒钟拍摄一张照片。

我想做的是动画(* .avi,* .gif,...)动画与位移图的演变以及剧情上方(或下方)的相应图片。

为了做到这一点,我首先制作了一个脚本,受到论坛上另一篇文章的极大启发,仅生成一个情节动画。然后另一个打开上面的图和下面的图片。但是,我没有设法混合这两个代码。

如果需要更多的理解,下面是两个脚本。

脚本1:生成动画情节

import matplotlib.pyplot as plt
import matplotlib.animation as animation
import pytex as p 
import os

#1- Data reading
for filename in os.listdir("."):
    if (filename[0]=="#"):
        f = open(filename,"r+",encoding="utf8")
        d = f.readlines()
        f.seek(0)
        for i in range(len(d)):
            if i == 21:
                f.write(d[i])
            if i > 23:
                f.write(d[i])
        f.truncate()
        f.close()
        os.rename(filename,filename[1:])

#2- Data for plot
def simData():
    for filename in os.listdir("."):
        data = p.loadDataMatrix(filename)
        tt = data["Time (sec)"]
        x_raw = data["Position (microns)"]
        y_raw = data["Load (N)"]
        x = []
        y = []
        t = 0.
        for i in range(0,len(x_raw),3):
            x = x + [x_raw[i] - x_raw[0]]
            y = y + [y_raw[i]]
            t = tt[i]                
            yield x, y, t

def simPoints(simData):
    xx, yy, t = simData[0], simData[1], simData[2]
    time_text.set_text(time_template%(t))
    line.set_data(xx, yy)
    return line, time_text    

#3- Plotting the figure
fig = plt.figure()
ax = fig.add_subplot(111)

ax.set_xlim(0, 450)
ax.set_ylim(0, 65)

delay = 1
line, = ax.plot([], [], 'b-', linewidth = 0.6)

time_template = 'Time = %.01f s'
time_text = ax.text(0.05, 0.9, '', transform=ax.transAxes)
ani = animation.FuncAnimation(fig, simPoints, simData, interval=delay, repeat=False, save_count = 50000)

ani.save('animation.mp4', fps=100, dpi=100)

脚本2:合并绘图和图片

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.image as im

fig, (chart, picture) = plt.subplots(nrows=2, figsize=(10,8))

# First, the chart
chart.plot(np.random.random(100))

# Second, an image
image=im.imread("../test_no_8/IMG_004850.tiff")
picture.imshow(image, aspect='auto')
picture.axis('off')


plt.show()
fig.savefig('temp.tiff', dpi=100)

非常感谢你的任何帮助,请原谅我的英语,如果它似乎不清楚。

0 个答案:

没有答案