Anam Nizami
Anam Nizami

Reputation: 377

Can we draw rectangle using matplotlib.Patches by just specifying its corner?

I want to conceal few points on a plot, I am using patches to draw a rectangle, so is there any way of plotting a rectangle with just specifying the corners? I only know how to draw by height and width parameters.

patch= ax1.add_patch(patches.Rectangle((x, y), 0.3, 0.5) 

how can i modify the code to draw rectangle by just using say coordinates like these (x1,y1),(x2,y2)(x3,y3)(x4,y4).

Upvotes: 3

Views: 2682

Answers (2)

Nick Brady
Nick Brady

Reputation: 6572

The selected answer still just calculates the length and width (and ignores any angle if one was desired). It could be made to work by calculating the angle and adding that too, but it's still hacking around your intention if you've already calculated all of the vertices.

Another option you have is to just use the patches.Polygon class.

points = [(x1,y1),(x2,y2)(x3,y3)(x4,y4)]
rect = patches.Polygon(points, linewidth=1, edgecolor='r', facecolor='none')
ax.add_patch(rect)

will end up just drawing a rectangle if that's what those points specify. Note, the order of the points matters, but that isn't a big deal. Here is an image of where I just did this. The green boxes + are my calculated points, and the red rectangles are my polygons

sample of where I did this

Upvotes: 1

David
David

Reputation: 8298

I assume that the coordinates to be ordered in the following way:

top_left = [2,2]
bottom_left = [2, 1]
top_right = [4,2]
bottm_right = [4, 1]

So you can easily calculate the width and height and input them to patches

w = top_left[0]-top_right[0]
h = top_left[1]-bottom_left[1]

NOTE

If they are not ordered the logic is simple, you find to points where the x position is identical and calculate in absolute value the the difference and obtain the width (and symmetrically the height)

Upvotes: 2

Related Questions