使用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
相关产品推荐
相关产品推荐

