是为特定句柄设置句柄长度的方法,而不是为所有句柄设置句柄长度的方法?
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()
导致所有行具有相同的 - 现在增加 - 长度:
在我的传说中,手柄的宽度不同,为了更清楚地看这个例子:
----- 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()
导致所有行具有相同的 - 现在增加 - 长度: