Неправильный рендеринг на границе осей в Matplotlib - PullRequest
1 голос
/ 15 июля 2011

Я хочу визуализировать прямоугольник в пределах осей в 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 и убедился, что это работает правильно(например, при наличии увеличения со всех сторон).

Это, по-видимому, связано с тем, как базовое изображение растеризуется на экран.Есть ли способ обойти эту проблему?

1 Ответ

2 голосов
/ 15 июля 2011

Точное поведение зависит от бэкэнда (Ваш пример работает так, как вы хотите, чтобы он работал в моей системе.)

Однако, если вы выключите отсечение для своего прямоугольника, оно должно работать так, как вы хотите на любом бэкэнде.

В приведенном выше примере просто выполните 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

...