Python 如何使保存的mp4与plot.show()的输出完全匹配?

Python 如何使保存的mp4与plot.show()的输出完全匹配?,python,matplotlib,ffmpeg,Python,Matplotlib,Ffmpeg,当我试图使用ffmpeg将动画结果保存到mp4时,我得到的是一团混乱 plt.show()精确显示我希望它在动画中显示的内容。但是,当我使用ffmpeg保存它时,结果与plt.show()返回的结果非常不同。我试过各种各样的观点来支持fps等,但没有任何效果 %matplotlib import pandas as pd import matplotlib as mpl ## uncomment this if you are running this on a Mac #mpl.use('Tk

当我试图使用ffmpeg将动画结果保存到mp4时,我得到的是一团混乱

plt.show()精确显示我希望它在动画中显示的内容。但是,当我使用ffmpeg保存它时,结果与plt.show()返回的结果非常不同。我试过各种各样的观点来支持fps等,但没有任何效果

%matplotlib
import pandas as pd
import matplotlib as mpl ## uncomment this if you are running this on a Mac
#mpl.use('TkAgg')         ## and want to use blit=True
import matplotlib.pyplot as plt 
import matplotlib.animation as animation 
import numpy as np 
import csv

people = ('','Jim', 'Dan')
plt.rcdefaults()
fig, ax = plt.subplots()
y_pos = np.arange(len(people))

ax.set_xlim(0,10)
ax.set_yticks(y_pos)
ax.set_yticklabels(people)
ax.invert_yaxis() 
ax.set_xlabel('Skill')
titleList=['Basketball','Hockey','Baseball']
df=[[0,5,7],[0,4,9],[0,2,6]]
def animate(i):
   # Example data
    while i<3:
        ax.set_yticks(y_pos)
        ax.set_yticklabels(people)
        ax.set_xlabel(titleList[i])
        performance=df[i]

        title = ax.text(0.5,0.95,str(titleList[i]), bbox={'facecolor':'w', 'alpha':0.5, 'pad':5},transform=ax.transAxes, ha="center")

        rects = ax.barh(y_pos, performance, align='center',
                color='blue', ecolor='None')
        return [rect for rect in rects] + [title]


ani = animation.FuncAnimation(fig,animate, frames=3, blit=True
                            ,interval=2000,repeat=False)

plt.rcParams['animation.ffmpeg_path'] = 'C:\\ffmpeg\\bin\\ffmpeg.exe'
Writer = animation.writers['ffmpeg']
ani.save('test.mp4')
plt.show() 
%matplotlib
作为pd进口熊猫
将matplotlib导入为mpl###如果在Mac上运行,请取消对此的注释
#mpl.use('TkAgg')###并希望使用blit=True
将matplotlib.pyplot作为plt导入
将matplotlib.animation导入为动画
将numpy作为np导入
导入csv
人物=('','吉姆','丹')
plt.rcdefaults()
图,ax=plt.子批次()
y_pos=np.arange(len(人))
ax.set_xlim(0,10)
轴设置锁定(y位置)
ax.设置标签(人)
ax.invert_yaxis()
ax.set\u xlabel(‘技能’)
标题列表=[“篮球”、“曲棍球”、“棒球”]
df=[[0,5,7],[0,4,9],[0,2,6]]
定义动画(i):
#示例数据

如前所述,我有一个
fps
选项,您可以传递到
ani.save
,我尝试了各种选项。这似乎没有什么帮助。代码混淆了正在执行的实际ffmpeg命令,因此我无法告诉您提供的ffmpeg是什么类型的输入(图像、视频、管道等)。请注意,对于图像,它将假定帧速率为25,除非您使用
-framerate
输入选项告诉它。实际的ffmpeg命令和生成的日志会很有帮助。嗨,我不知道你说的“混淆”是什么意思。乐意提供所需的一切。帧速率与“fps”的意思相同吗?我试过玩弄它,但运气不好。此代码可以复制到Jupyter笔记本,您可以看到结果。顺便说一句,如果这有什么区别的话,我会在Windows上打开它。
blit=True
仅用于显示绘图。要查看保存的动画,您需要设置
blit=False
。有一个
fps
选项可以传递到
ani.save
,如前所述,我尝试了各种选项。这似乎没有什么帮助。代码混淆了正在执行的实际ffmpeg命令,因此我无法告诉您提供的ffmpeg是什么类型的输入(图像、视频、管道等)。请注意,对于图像,它将假定帧速率为25,除非您使用
-framerate
输入选项告诉它。实际的ffmpeg命令和生成的日志会很有帮助。嗨,我不知道你说的“混淆”是什么意思。乐意提供所需的一切。帧速率与“fps”的意思相同吗?我试过玩弄它,但运气不好。此代码可以复制到Jupyter笔记本,您可以看到结果。顺便说一句,如果这有什么区别的话,我会在Windows上打开它。
blit=True
仅用于显示绘图。要查看保存的动画,需要设置
blit=False