matplotlib 绘制图例时tikzplotlib发生AttributeError

wsewodh2  于 2023-04-07  发布在  其他
关注(0)|答案(1)|浏览(194)

我试图使用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")
qjp7pelc

qjp7pelc1#

嘿我也有同样的问题,
问题是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)

免责声明:这不是我的代码。但这个问题可能非常烦人,这就是为什么我在这里分享代码。作者是st--

相关问题