2016-06-28 66 views
0

我已經繪製在python圖表上的某些數據的一部分,然後用於排序在python圖例手柄和標籤的基礎上,標籤字符串

手柄,標籤= ax0_1.get_legend_handles_labels()

獲取標籤和句柄。我得到的標籤是有序的這樣的:

A1 01-01-01 01 ABC
A1 01-01-01 01 ABCD
A1 01-01-01 01 ABCDE
A1 01-01-01 02 ABC
A1 01-01-01 02 ABCD
A1 01-01-01 02 ABCDE

...但我需要的是標籤相應的手柄來進行排序,以便順序將是這個:

A1 01-01-01 01 ABC
A1 01-01-01 02 ABC
A1 01-01-01 01 ABCD
A1 01-01-01 02 ABCD
A1 01-01-01 01 ABCDE
A1 01-01-01 02 ABCDE

我已經嘗試了幾件事情,但到目前爲止只有頭痛。
有人知道這是如何做到的?

+0

只是爲了闡明:標籤中使用字符串的最後一部分,在空格之後,所以只有標籤的'ABC'或'ABCD'部分。 – alfavictor

回答

0

先嚐試通過所需的按鍵排序指標:

labels = [ 
    'A1 01-01-01 01 ABC', 
    'A1 01-01-01 01 ABCD', 
    'A1 01-01-01 01 ABCDE', 
    'A1 01-01-01 02 ABC', 
    'A1 01-01-01 02 ABCD', 
    'A1 01-01-01 02 ABCDE' 
] 

handles = range(len(labels)) 

sorted_indexes = sorted(range(len(labels)), key=lambda i: labels[i].split()[-1]) 
sorted_labels1 = [labels[i] for i in sorted_indexes] 
sorted_handles = [handles [i] for i in sorted_indexes] 

只是爲了好玩:多一點不起眼,但較短的解決方案:

sorted_labels, sorted_handles = zip(*sorted(zip(labels, handles),    
              key=lambda (label, handle): label.split()[-1])) 
+0

謝謝你,亞當。這很好,很緊湊。但它看起來像你排序整數列表(應該叫'手柄'?),然後重新排序字符串列表...我想要做的是排序字符串列表第一(只使用最後一部分字符串,'ABC,ABCD,ABCDE'部分),然後相應地重新排序另一個列表。 – alfavictor

+0

很高興幫助。您只需要將'key'函數更改爲'sorted',就像您在自己的解決方案中所做的一樣。 我會在需求澄清後更新解決方案。 –

0

大量實驗後,用亞當Sosnowski的想法靈感,我找到了一個辦法:

indexes =[] 
    for l in labels: 
     indexes.append(labels.index(l)) 
    sorted_labels = sorted(labels, key = lambda string: string.split()[-1]) 
    sorted_indexes = [] 
    for i, l in enumerate(labels): 
     for j in range(len(labels)): 
     if labels[i] == sorted_labels[j]: 
      sorted_indexes.append(j) 
    sorted_handles = [handles [i] for i in sorted_indexes] 
    handles =sorted_handles 
    labels = sorted_labels 

當然,這不是最eleg螞蟻的代碼,但它的作品。稍後我會嘗試開發更緊湊的代碼。

+0

這裏要小心:由於標籤上的嵌套循環,解決方案具有二次運行時間,它只需要線性化。 –