2016-03-25 42 views
1

在我的傳說手柄的寬度是不同的,爲了更清楚,看看這個例子:是否爲特定句柄設置handlelength,而不是所有?

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

如果我設置handlelength它適用於所有的人,也沒有辦法,以便適應一個寬度,所以我可以爲特定的句柄設置handlelength參數來調整這個例子嗎?

回答

1

下面是控制手柄長度(儘管不使用該參數)並將其設置爲圖例(設置圖例大小)中的最大值/長度的一種方法。這種方法直接修改圖例中的線條對象。

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() 

這是與原來的圖例的圖:

original legend

現在,一個可以在第一行的長度重新設置爲更長的值,例如:

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() 

從而造成此傳說:

longer single entry

最後,上述方法來檢索最長的線,它適用於所有的傳奇行:

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() 

中的所有線路得到的具有相同 - 現在增加 - 長度:

all long

相關問題