2011-07-14 39 views
1

我想在matplotlib的軸中渲染一個矩形。座標軸是原點位於左下角的單位正方形。對於矩形與軸的大小相同的情況 - 我希望矩形看起來好像它是軸的邊界一樣。在Matplotlib中軸邊框的不正確渲染

問題是,看起來渲染不正確。矩形的左邊(x = 0)和頂部(y = 1)得到渲染,但底部(y = 0)和右邊(x = 1)不顯示。

注意:這不僅限於矩形......它對於線也是如此。出現產生渲染爲:

Improper rectangle rendering.

下面的代碼片段演示了此問題:

import matplotlib.pyplot as mpl 

r = mpl.Rectangle((0,0), 1, 1, edgecolor='red', facecolor='none', zorder=100) 

axes = mpl.gca() 
axes.add_patch(r) 
axes.set_xbound(0, 1) 
axes.set_ybound(0, 1) 

axes.get_xaxis().set_visible(False) 
axes.get_yaxis().set_visible(False) 

[spine.set_visible(False) for spine in axes.spines.values()] 

mpl.show() 

我也呈現爲PDF和驗證,這正常工作(例如,在各方的放大時存在)。

這看似與底層圖像如何被柵格化到屏幕上有關。有沒有解決這個問題的方法?

回答

2

確切的行爲是依賴於後端(你舉的例子可以作爲你就喜歡我的系統上。)

但是,如果你把剪下你的矩形,它應該表現爲你想要的任何後端。

在你的例子中,只是做r.set_clip_on(False)

import matplotlib.pyplot as plt 

r = plt.Rectangle((0,0), 1, 1, edgecolor='red', facecolor='none', zorder=100) 

ax = plt.gca() 
ax.add_patch(r) 
ax.axis([0, 1, 0, 1]) 

ax.xaxis.set_visible(False) 
ax.yaxis.set_visible(False) 

[spine.set_visible(False) for spine in ax.spines.values()] 

r.set_clip_on(False) 

plt.show() 

enter image description here

+0

感謝喬。您的解決方案很有意義並解決了我的問題。但是這確實需要另外兩個問題。這是我back_end中的錯誤嗎?似乎是。其次,與裁剪打開或關閉有什麼區別?削減效率低一點的繪圖?我只問,因爲我正在做很多動畫。 – Rocketman

+0

@Rocketman - 我不確定這是否是一個錯誤。你可以在用戶名單上詢問,並且可能會得到比我可以給你更好的答案。至於第二:我不認爲(??)這個剪輯會在簡單情況下影響動畫的速度。 (如果你還沒有使用blitting,那麼在matplotlib頁面上有幾個教程。) –