python - matplotlib 动画适用于 Windows 和 Linux,但不适用于 Mac OS
问题描述
我在 Mac OS 上的 Python 脚本中遇到 matplotlib 动画问题。
完整的脚本在这里(有点长),动画部分在这里:
# ...
ani = animation.FuncAnimation(
fig,
animate,
np.arange(m),
interval=tint,
blit=True,
repeat=False
)
plt.show()
我遇到的问题是动画在 Windows 和 Linux 上运行良好,但在 Mac OS 上动画不显示。这是一个视频演示。
在所有三个系统(Windows、Linux 和 Mac OS)上,我只安装了运行脚本matplotlib
的numpy
包,除此之外我没有安装任何东西,所以所有三个(应该)都有相同的包。以防万一,以下是他们环境的摘要:
# Windows (10.19041.450, x64)
- Python 3.7.2
- matplotlib 3.3.1
- numpy 1.19.1
# Linux (Ubuntu 20.04.1, x64)
- Python 3.8.2
- matplotlib 3.3.1
- numpy 1.19.1
# Mac OS (10.15.6, x64)
- Python 3.8.5
- matplotlib 3.3.1
- numpy 1.19.1
我尝试过其他简单的绘图动画示例(例如matplotlib 文档中的那些),它们在 Mac OS 上运行良好,所以我猜我的特定脚本有问题,但事实上这个相同的脚本适用于Windows 和 Linux(尽管出于某种原因具有不同的动画速度)让我很困惑。
我还在其他 3 台安装了不同 Mac OS 和 Python 版本的 Mac 上测试了我的脚本,但都是一样的。
您是否看到我的脚本在 Mac OS 上不显示动画的任何原因?
解决方案
我发现在我的情况下,默认的matplot 后端是MacOSX
,显然这个后端不能做我的动画(无论出于何种原因)。
而有能力的后端竟然是TkAgg
. 所以在这样设置之后:
matplotlib.use("TkAgg")
我现在也可以在 Mac OS 上的脚本中获得动画。
如果您对更多细节感兴趣,我写了一篇关于它的博客文章。
推荐阅读
- sql - SQL:Parent,Child,Subchild,仅当其所有孩子都有特定的子孩子时才选择父母
- java - ScheduledExecutorService 随机停止运行
- json - 如果多个键具有确切的名称,如何访问 JSON 值?
- linux - 为什么不自动收割子进程?
- python - 如何从数据框中获取最大值?
- azure - 更改邀请电子邮件中inviteRedeemUrl 的导航:Azure AD
- android - 当任何一侧超出网络覆盖范围时,Pjsip 呼叫不会断开连接
- html - 为什么我的页脚显示在我的页面顶部?
- r - 时间序列 - 检测季节性以设置频率
- javascript - 如何在网站上获得清晰的图像质量?