2015-10-14 48 views
1

我最近一直在使用matplotlib的fill_between函數繪製帶有虛線邊的矩形。例如,這一個位於T1,T2,FMIN和FMAX之間:如何在matplotlib fill_between函數中控制邊的破折號?

ax.fill_between([t1, t2], fmin, fmax, facecolor=(0, 0, 0, 0), linestyle='--) 

我知道它是可以指定儀表開關順序與關鍵字參數dashes=[6, 2]plot功能,比如,但這不適用於fill_between。我看過fill_between()documentation,但我沒有找到任何解決方案。

有什麼想法?

回答

1

這將是一個評論,但它似乎並沒有很好的格式。

看看代碼,看起來fill_between返回一個PolyCollection,與上面提到的使用破折號關鍵字的Line2D對象相反。 PolyCollection類實際上並不將邊緣線保存爲Line2D類(這可能適合於優化原因)。這意味着即使邊線繪製得像線條一樣,您不必像Line2D類那樣具有完全的靈活性。該PolyCollection似乎缺少這樣的代碼:

def _draw_dashed(self, renderer, gc, path, trans): 
    gc.set_linestyle('dashed') 
    if self._dashSeq is not None: 
     gc.set_dashes(0, self._dashSeq) 

特別,沒有在PolyCollection的繪製方法沒有set_dashes代碼。爲了實現這一點,你需要一種方法來在你的PolyCollection實例中設置短劃線序列變量,然後在draw命令期間調用gc.set_dash(dash_seq)

我沒有看到任何方式將此代碼掛鉤(注入)到PolyCollection中,而無需修改源代碼。因此,這可能是matplotlib github中的一項功能請求。這似乎是一個合理的要求,能夠控制邊緣的短劃線序列,但這可能比初看起來更復雜,因爲那樣你將不得不在同一個邊緣(在一般情況下)之間同步這個序列,這可能不是值得。

但是,您可能會發現寫一個新函數來繪製正方形而不是使用fill_between函數會更好,因爲這不是它的意思。通過個人功能,您可以使用Line2D對象。

編輯:如果你碰巧在github上問matplotlib,讓我知道他們說什麼。他們實際上可能會說,你可以在draw命令中注入適當的子類代碼。我將不得不考慮更多。