You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用tikzplotlib保存quiver图触发ZeroDivisionError的问题问询

Fixing ZeroDivisionError when saving quiver plot with tikzplotlib

我之前也踩过这个一模一样的坑!这是tikzplotlib早期版本处理quiver图梯度数据时的已知bug,触发原因是库在解析quiver的UV数据维度和步长时,内部逻辑出现了除零情况。下面给你几个亲测有效的解决办法:

方法1:升级tikzplotlib到最新版本

这个bug在后续版本更新里已经被官方修复了,直接升级库是最省心的方案:

pip install --upgrade tikzplotlib

升级后再运行你的原代码,大概率就能正常导出tikz文件了。

方法2:调整梯度计算的步长传入方式

如果暂时没法升级库,可以手动从网格数据中提取步长,代替直接传入数值,让numpy的梯度计算更准确,同时避免tikzplotlib的解析错误:

import matplotlib.pyplot as plt
import numpy as np
import tikzplotlib

x,y = np.meshgrid(np.arange(-2, 2, .2), np.arange(-2, 2, .25))
z = x*np.exp(-x**2 - y**2)

# 从网格中自动提取步长,避免手动输入的误差
dx = np.diff(x[0])[0]
dy = np.diff(y[:,0])[0]
# np.gradient的步长参数顺序是y方向、x方向,要和网格对应
v, u = np.gradient(z, dy, dx)

fig, ax = plt.subplots()
q = ax.quiver(x,y,u,v)
tikzplotlib.save("2delete.tex")

方法3:显式指定quiver的scale参数

有时候tikzplotlib对quiver的自动缩放因子计算会触发除零,手动指定scale参数可以绕过这个逻辑:

q = ax.quiver(x,y,u,v, scale=10)  # scale值可以根据你的图的视觉效果调整

以上三种方法都能解决这个ZeroDivisionError问题,优先推荐升级库的方案,一劳永逸。

内容的提问来源于stack exchange,提问作者gumpel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 14:37:49