2011-07-14 38 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页面上有几个教程。) –