绘制图例时 tikzplotlib 出现 AttributeError

Kub*_*623 5 python latex matplotlib tikz

我正在尝试使用 tikzplotlib 保存图形。但是,我遇到了 AttributeError:“Legend”对象没有属性“_ncol”。我目前使用 tikzplotlib 版本 0.10.1 和 matplotlib 版本 3.7.0。不使用“plt.legend()”一切正常。

下面是一个不起作用的示例:

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

# Data
x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)
y3 = np.tan(x)

# Plotting
plt.figure()
plt.plot(x, y1, label='sin(x)')
plt.plot(x, y2, label='cos(x)')
plt.plot(x, y3, label='tan(x)')
plt.legend()

# Save as TikZ file
tikzplotlib.save("plot.tikz")

Run Code Online (Sandbox Code Playgroud)

小智 11

嘿我有/遇到同样的问题,

问题是 matplotlib 3.6 的界面发生了变化。GitHub 上已经有一个针对 tikzplotlib 的修复程序 ( #558 ),但目前看来不会发生任何事情。不过,GitHub 上有一个针对该问题的解决方法(Issue)。它运作得很好。我希望这个答案很快就会过时。

为了完整起见,我将再次在此处添加代码。

def tikzplotlib_fix_ncols(obj):
    """
    workaround for matplotlib 3.6 renamed legend's _ncol to _ncols, which breaks tikzplotlib
    """
    if hasattr(obj, "_ncols"):
        obj._ncol = obj._ncols
    for child in obj.get_children():
        tikzplotlib_fix_ncols(child)
Run Code Online (Sandbox Code Playgroud)

免责声明:这不是我的代码。但这个问题可能非常烦人,这就是我在这里分享代码的原因。作者是——