gpt4 book ai didi

python - 如何让 matplotlib 在动画中显示完整的子图?

转载 作者:行者123 更新时间:2023-12-04 23:03:53 25 4
gpt4 key购买 nike

我正在尝试编写一个简单的免疫系统模拟器。我将受感染的组织建模为一个简单的细胞网格和各种细胞内信号,我想在一个图中动画细胞的运动以及随着感染的进展在另一个图中的病毒存在强度。我正在使用 matshow matplotlib提供的功能.但是,当我将两者相邻绘制时,除非我自己拉开窗口,否则整个网格都会被剪掉。保存到 mp4 时,我根本无法解决这个问题。

这是默认 View ,与我在保存到 mp4 时观察到的相同:


这是展开查看器窗口后的样子


我在 OS X 10.10.2 上运行 Python 2.7.9 和 matplotlib 1.4.2,使用 ffmpeg 2.5.2(通过 Homebrew 安装)。下面是我用来生成动画的代码。我尝试使用 plt.tight_layout()但这并没有影响问题。如果有人对如何解决此问题有任何建议,我将不胜感激!我特别希望能够在不查看 plt.show() 的情况下保存它.谢谢!

def animate(self, fname=None, frames=100):
fig, (agent_ax, signal_ax) = plt.subplots(1, 2, sharey=True)

agent_ax.set_ylim(0, self.grid.shape[0])
agent_ax.set_xlim(0, self.grid.shape[1])
signal_ax.set_ylim(0, self.grid.shape[0])
signal_ax.set_xlim(0, self.grid.shape[1])

agent_mat = agent_ax.matshow(self.display_grid(),
vmin=0, vmax=10)
signal_mat = signal_ax.matshow(self.signal_display(virus),
vmin=0, vmax=20)
fig.colorbar(signal_mat)

def anim_update(tick):
self.update()
self.diffuse()
agent_mat.set_data(self.display_grid())
signal_mat.set_data(self.signal_display(virus))
return agent_mat, signal_mat

anim = animation.FuncAnimation(fig, anim_update, frames=frames,
interval=3000, blit=False)

if fname:
anim.save(fname, fps=5, extra_args=['-vcodec', 'libx264'])
else:
plt.show()

最佳答案

根据 matplotlib 文档

Because of how matshow() tries to set the figure aspect ratio to be the one of the array, if you provide the number of an already existing figure, strange things may happen.



我认为你最好使用 imshow相反(我相信这是 matshow 调用。它有一个 aspect 关键字参数,如果它不能自动工作,你可以使用它。

同样根据 matplotlib 文档,

Sets origin to ‘upper’, ‘interpolation’ to ‘nearest’ and ‘aspect’ to equal.



我想你想做前两个,但离开 aspect作为汽车。

关于python - 如何让 matplotlib 在动画中显示完整的子图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29018990/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com