是为特定句柄设置句柄长度的方法,而不是为所有句柄设置句柄长度的方法?

Is the way to set handlelength for particular handle, not for all?

在我的传说中,手柄的宽度不同,为了更清楚地看这个例子:

----- Sin(x)
...   Cos(x)
____  Tan(x)

如果我设置 handlelength 它适用于所有它们并且无法将它们调整为一个宽度,那么我可以为特定手柄设置 handlelength 参数以调整此示例吗?

这是控制句柄长度(虽然不使用该参数)并将其设置为图例中的最大值 value/length(设置图例大小)的一种方法。这种方法直接修改了图例中的线条对象。

LEGEND = ax.legend()
LLINES = LEGEND.get_lines()

MAX = max([max(X) for X in [L.get_xdata() for L in LLINES]])

for L in LLINES:
    plt.setp(L,xdata=np.array([L.get_xdata()[0],MAX]))

首先,您使用 get_lines() 从图例中提取线条。从这些对象中,您可以使用 get_xdata() 提取 x 值。这在这里合并成一行,从所有图例条目中找到最大 x 值。
获得最大值 MAX 后,您可以遍历图例中的所有线对象,并将最大值 x 值设置为提取的 MAX。这将使所有行的长度相同。


这是一个例子。它首先操纵一条图例线变长(图例不会调整大小,所以这只能到此为止,这里只是为了展示一个例子)。接下来,它提取新的最大值并相应地设置所有长度。

from math import pi as pi
import numpy as np
import matplotlib.pyplot as plt

x=np.linspace(0.0,2.0*pi,101)

fig,ax = plt.subplots()

LABEL = ['Sin(x)', 'Cos(x)', 'Tan(x)']

LINE = [[],[],[]]

LINE[0] = ax.plot(x,np.sin(x),label=LABEL[0])
LINE[1] = ax.plot(x,np.cos(x),label=LABEL[1])
LINE[2] = ax.plot(x,np.tan(x),label=LABEL[2])

ax.set_ylim([-1.0,1.0])

LEGEND = ax.legend()

plt.show()

这是原图的情节:

现在,可以将第一行长度重置为更长的值,例如:

LLINES = LEGEND.get_lines()

plt.setp(LLINES[0],xdata=np.array([LLINES[0].get_xdata()[0],\
                                   LLINES[0].get_xdata()[1]*1.25]))

plt.show()

导致这个图例:

最后,上述检索最长线并将其应用于所有图例线的方法:

MAX = max([max(X) for X in [L.get_xdata() for L in LLINES]])

for L in LLINES:
    plt.setp(L,xdata=np.array([L.get_xdata()[0],MAX]))

plt.show()

导致所有行具有相同的 - 现在增加 - 长度: