Czy istnieje sposób określenia krawędzi dla matplotlib's Rectangle patch, tak aby ramka znajdowała się poza podaną domeną? W programie Photoshop nazywałby się na przykład "pozycją obrysu". Pozwala mi ilustrują przykład:Ustaw krawędź prostokąta matplotlib na zewnątrz określonej szerokości?
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.patches import Rectangle
# Here's my "image"
X = np.arange(16).reshape(4,4)
# Suppose I want to highlight some feature in the middle boxes.
fig = plt.figure()
ax = fig.add_subplot(111)
ax.imshow(X, cmap=plt.cm.gray, interpolation='nearest')
ax.add_patch(Rectangle((0.5, 0.5), 2, 2, fc='none', ec='r'))
plt.show()
Daje to następujące:
Jednakże, w przypadku zmian wyżej następująco
ax.add_patch(Rectangle((0.5, 0.5), 2, 2, fc='none', ec='r', lw=10))
ja otrzymać postać:
Jak widać, krawędź jest umieszczona centralnie wzdłuż granicy domeny obiektu Rectangle, a więc spływa do tej domeny. Czy możliwe jest wymuszenie, aby krawędź krawędzi znajdowała się poza domeną Prostokąta?
myślę, że to nieco dziwniejsze, że granica krwawienia * z * domeny prostokąta, nawet. Wydaje mi się, że tak czy inaczej rozwiązaniem jest przetłumaczenie _pointów_, w których szerokość linii jest określona we współrzędnych, z którymi definiowany jest Prostokąt (zwykle współrzędne danych, może to być dowolna transformacja), a następnie dostosuj 'x, y' prostokąta. Co wyraźnie jest kłopotliwe. Może jest coś w "patheffects". – cphlewis
Więc, w zasadzie narysuj większy prostokąt i odpowiednio dopasuj '(x, y)'? Myślałem o czymś podobnym, ale "linewidth" wydaje się być oparty na bieżącym rozmiarze, a nie pikselach. Nie mogę znaleźć w dokumentacji, jak to jest określone: mówi tylko o "wartości float w punktach": http://matplotlib.org/api/lines_api.html#matplotlib.lines.Line2D.set_linewidth –
(grzebany w "patheffects" dla bitu informującego o tym, co potrafi Strokes: offset, ale nie, AFAICT, rodzaj rozszerzenia i pułapkowania, jakie mogą zrobić programy drukujące. Myślę, że dostosowanie 'x, y' będzie konieczne.) – cphlewis