python matplotlib繪圖實現(xiàn)刪除重復(fù)冗余圖例的操作
問題:
由于自己做項目的時候,需要循環(huán)的繪制數(shù)據(jù),假設(shè)有100個樣本,每個樣本包含兩個坐標點(A, B),我需要對這兩個點標上不同的顏色,同時還要畫出兩點間的連線。
顯然這個問題中圖例我只需要3個(A點,B點,AB的連線),而不是300個,因為每個樣本的A點都是同樣的顏色,B點也都是一樣的顏色,AB的連線也是。
但是單純的在畫完圖之后用plt.legend(), 它會給你畫出所有300個圖例來,這肯定不是我想要的。
探索過程:
如何解決呢?
當然有一種很強制的方法,就是只在畫第一個樣本,或最后一個樣本時,給其指定label,其它樣本時不給label,就不會畫出來了。
但是我在想有沒有更好地辦法,百度了半天,窮盡所有關(guān)鍵詞,無果。
轉(zhuǎn)而谷歌,想著要不把關(guān)鍵詞換成英語看看(以前總覺得看英文的博客會比中文的慢很多,總會更偏向于母語閱讀,但是這次經(jīng)歷大概會改變我之后的態(tài)度,相比起為了排除百度的大量無關(guān)答案所花的漫長的時間,好像還不如直接搜索英文來得有效率,關(guān)鍵詞搜的就是:python omit redundant legend),結(jié)果第一條搜索結(jié)果就看到了我想要的解決方案,很是驚喜,本著方便自己以后查找,也方便遇到同樣問題的人,故而記錄下來,雖然不是什么多神的東西啦。
解決方案:
from collections import OrderedDict import matplotlib.pyplot as plt handles, labels = plt.gca().get_legend_handles_labels() by_label = OrderedDict(zip(labels, handles)) plt.legend(by_label.values(), by_label.keys())
理解:
plt的legend函數(shù)可接收兩個參數(shù),一個是handles列表,一個是label列表。
引入有序字典OrderedDict的目的就是去除冗余的圖例,因為字典的鍵值不能重復(fù)(即重復(fù)的只保留一個)。
第一行的意思應(yīng)該是迭代地將當前plt中存的所有handles和labels返回到handles變量和labels變量中,你之前所在畫布上畫的每一步應(yīng)該都會存在plt中。
所以,上述代碼的作用是:僅保留plt中存在的所有非同名的圖例名稱,不出現(xiàn)重復(fù)圖例名稱
補充:Python/matplotlib之清空繪圖
clf()
# 清圖
cla()
# 清坐標軸
close()
# 關(guān)窗口
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。
相關(guān)文章
對python中的iter()函數(shù)與next()函數(shù)詳解
今天小編就為大家分享一篇對python中的iter()函數(shù)與next()函數(shù)詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-10-10Tensorflow2.1實現(xiàn)文本中情感分類實現(xiàn)解析
這篇文章主要為大家介紹了Tensorflow2.1實現(xiàn)文本中情感分類實現(xiàn)解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-11-11Python使用Peewee創(chuàng)建數(shù)據(jù)庫的實現(xiàn)示例
Peewee是一個簡單小巧的Python ORM,本文主要介紹了Python使用Peewee創(chuàng)建數(shù)據(jù)庫的實現(xiàn)示例,具有一定的參考價值,感興趣的可以了解一下2023-08-08關(guān)于python3安裝pip及requests庫的導(dǎo)入問題
小編最近快畢業(yè)了,閑著無事學(xué)習(xí)下python的內(nèi)容在學(xué)習(xí)到requsets庫的導(dǎo)入問題時遇到一些問題,通過查找相關(guān)資料問題順利解決,今天小編把問題解決思路及注意事項分享給大家供大家參考學(xué)習(xí)2021-05-05python中把元組轉(zhuǎn)換為namedtuple方法
在本篇文章里小編給大家整理的是一篇關(guān)于python中把元組轉(zhuǎn)換為namedtuple方法,有興趣的朋友們可以參考下。2020-12-12