2014-01-10 59 views
3

有沒有辦法讓繪圖圖例水平(從左到右)而不是垂直運行,沒有指定列數(ncol=...)?我打算繪製不同數量的線條(大約5-15),我寧願不嘗試動態計算最佳的列數(即適合整個圖的列數,而不會跑掉,當標籤變化時)。另外,當有多個單行時,條目的排序順序爲自上而下,然後是左 - 右;如果它可以默認爲水平,這也會被緩解。matplotlib圖例水平排列第一個

相關:Matplotlib legend, add items across columns instead of down

回答

4

似乎在這個時候,matplotlib默認爲垂直佈局。雖然不理想,一種選擇就是做線/ 2的數量,作爲一種解決方法:

import math 
import numpy as np 

npoints = 1000 


xs = [np.random.randn(npoints) for i in 10] 
ys = [np.random.randn(npoints) for i in 10] 

for x, y in zip(xs, ys): 
    ax.scatter(x, y)  

nlines = len(xs) 
ncol = int(math.ceil(nlines/2.)) 
plt.legend(ncol=ncol) 

所以在這裏你會採取線用戶要打印(通過nlines = len(xs)),然後變換的號碼長度通過ncol = int(math.ceil(nlines/2.)),併發送到plt.legend(ncol=ncol)

+0

謝謝@Olga,但我不明白你的解決方案應該如何工作---例如,與'lines = 2',它設置列數爲1.請注意,我已經描述過ncol可以動態計算......這正是我想避免的。 – DilithiumMatrix

+0

對不起,我不認爲有一種方法可以有一個水平的傳說,沒有動態計算= \ –

+0

是的,我認爲可能是這樣的...它應該真的是一個功能! – DilithiumMatrix