Matplotlib 中轴边界的渲染不正确

发布于 2024-11-23 21:03:41 字数 734 浏览 4 评论 0原文

我想在 matplotlib 中的轴内渲染一个矩形。轴是原点位于左下角的单位正方形。对于矩形与轴大小相同的情况 - 我希望矩形看起来就像是轴的边界。

问题是渲染似乎不正确。矩形的左侧 (x=0) 和顶部 (y=1) 得到渲染,但底部 (y=0) 和右侧 (x=1) 不显示。

注意:这不仅适用于矩形……对于直线也同样如此。生成的渲染显示为:

Improper矩形渲染。

以下代码片段演示了该问题:

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 并验证这可以正常工作(例如,当放大所有侧面时)。

这似乎与底层图像如何光栅化到屏幕有关。有办法解决这个问题吗?

I want to render a rectangle within an axes in matplotlib. The axes is the unit square with the origin at the bottom left corner. For the case where the rectangle is the same size as the axes - I want the rectangle to appear as though it is the border of the axes.

The problem is that it appears that the rendering is incorrect. The left (x=0) and top (y=1) of the rectangle get rendered, but the bottom (y=0), and right (x=1) do not show up.

Note: This is not specific to only rectangles ... it remains true for lines as well. The resulting rendering appears as:

Improper rectangle rendering.

The following code snippet demonstrates the problem:

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()

I have also rendered to PDF and verified that this works correctly (for example when zooming in all sides are present).

This seemingly has to do with how the underlying image gets rasterized to the screen. Is there a way around this issue?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

音栖息无 2024-11-30 21:03:41

确切的行为取决于后端(您的示例在我的系统上按照您希望的方式工作。)

但是,如果您关闭矩形的剪切,它应该在任何后端上按照您想要的方式运行。

在上面的示例中,只需执行 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()

在此处输入图像描述

The exact behavior is backend dependent (Your example works as you'd like it to on my system.)

However, if you turn clipping off for your rectangle, it should behave as you want on any backend.

In your example above, just do 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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文