亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

帶有圖例和錯誤欄的奇怪matplotlib zorder行為

帶有圖例和錯誤欄的奇怪matplotlib zorder行為

守候你守候我 2021-03-17 17:10:50
我遇到了圖例和錯誤欄繪圖命令的相當奇怪的行為。我正在將Python xy 2.7.3.1與matplotlib 1.1.1 以下代碼一起使用,以例證所觀察到的行為:import pylab as Pimport numpy as Nx1=N.linspace(0,6,10)y1=N.sin(x1)x2=N.linspace(0,6,5000)y2=N.sin(x2)xerr = N.repeat(0.01,10)yerr = N.repeat(0.01,10)#error bar caps visible in scatter dotsP.figure()P.subplot(121)P.title("strange error bar caps")P.scatter(x1,y1,s=100,c="k",zorder=1)P.errorbar(x1,y1,yerr=yerr,xerr=xerr,color="0.7",     ecolor="0.7",fmt=None, zorder=0)P.plot(x2,y2,label="a label")P.legend(loc="center")P.subplot(122)P.title("strange legend behaviour")P.scatter(x1,y1,s=100,c="k",zorder=100)P.errorbar(x1,y1,yerr=yerr,xerr=xerr,color="0.7",     ecolor="0.7",fmt=None, zorder=99)P.plot(x2,y2,label="a label", zorder=101)P.legend(loc="center")P.show()這產生了這個情節:如您所見,錯誤欄上限正在覆蓋散點圖。如果我增加zorder足夠多,這種情況將不再發生,但情節線將覆蓋圖例。我懷疑該問題與matplotlib的zorder問題有關??焖伲a臟,hacky解決方案也受到贊賞。編輯(感謝@nordev):期望的結果如下:誤差線和末端蓋應在散點圖點以下。線圖應在散點圖和誤差線上方傳說應高于一切根據您的答案調整zorder:P.legend(zorder=100) -> self.legend_ = mlegend.Legend(self, handles, labels, **kwargs) TypeError: __init__() got an unexpected keyword argument 'zorder'P.errorbar(zorder=0),P.scatter(zorder=1),...如正確地你的建議,仍然得到同樣的情節,誤差線帽仍然是分散的點上方。我相應地更正了上面的示例。
查看完整描述

2 回答

?
飲歌長嘯

TA貢獻1951條經驗 獲得超3個贊

根據您發布的代碼,創建的圖是正確的。最低 的對象zorder放在底部,而最高 的對象zorder放在頂部。您鏈接到的zorder問題已在matplotlib版本1.2.1中修復,因此,如果可能,應更新安裝。

在您的第一個子圖中,誤差線繪制在散點上方,因為使用errorbar會調用zorder=2,而scatter使用zorder=1-會調用,這意味著誤差線將覆蓋散點。

在你的第二個插曲,你叫errorbarzorder=99,scatterzorder=100plotzorder=101-這意味著errorbars將被放置在散點和線下兩種。

之所以legend在第一個子圖中的行頂部顯示它,而在第二個子圖中的同一行頂部顯示它,是因為您沒有顯式設置圖例objectazorder值,這意味著它將使用它的默認值(我相信是5)。要更改圖例的zorder,只需使用P.legend(loc="center").set_zorder(102)其中102是所需的zorder值。

因此,為了產生所需的輸出,必須相應地設置zorder參數。由于您尚未在問題中描述所需的輸出,因此我很難“更正”您的代碼,因為我不知道您希望按什么順序繪制對象。


查看完整回答
反對 回復 2021-03-27
?
慕蓋茨4494581

TA貢獻1850條經驗 獲得超11個贊

在我看來,新舊軟件的使用總是“利弊”,因此最終我猜這是由用戶決定的,更重要的是(例如新功能與已知的錯誤解決方法等) )。我以前的評論應該更清楚一些;避免已知問題(至少在某種程度上)的最簡單方法是使軟件保持最新。

查看完整回答
反對 回復 2021-03-27
  • 2 回答
  • 0 關注
  • 373 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號