You can use arcs by making the polygons from paths.
A normal square:
import matplotlib.path as mpath
import matplotlib.patches as patches
verts = [(0,0),
(1,0),
(1,1),
(0,1),
(0,0)]
codes = [mpath.Path.MOVETO] + (len(verts)-1)*[mpath.Path.LINETO]
square_verts = mpath.Path(verts, codes)
fig, ax = plt.subplots(subplot_kw={'aspect': 1.0, 'xlim': [-0.2,1.2], 'ylim': [-0.2,1.2]})
square = patches.PathPatch(square_verts, facecolor='orange', lw=2)
ax.add_patch(square)
A rounded square can be made with:
verts = [(0.2, 0.0),
(0.8, 0.0), # start of the lower right corner
(1.0, 0.0), # intermediate point (as if it wasn't rounded)
(1.0, 0.2), # end point of the lower right corner
(1.0, 0.8), # move to the next point etc.
(1.0, 1.0),
(0.8, 1.0),
(0.2, 1.0),
(0.0, 1.0),
(0.0, 0.8),
(0.0, 0.2),
(0.0, 0.0),
(0.2, 0.0)]
codes = [mpath.Path.MOVETO,
mpath.Path.LINETO,
mpath.Path.CURVE3,
mpath.Path.CURVE3,
mpath.Path.LINETO,
mpath.Path.CURVE3,
mpath.Path.CURVE3,
mpath.Path.LINETO,
mpath.Path.CURVE3,
mpath.Path.CURVE3,
mpath.Path.LINETO,
mpath.Path.CURVE3,
mpath.Path.CURVE3]
rounded_verts = mpath.Path(verts, codes)
fig, ax = plt.subplots(subplot_kw={'aspect': 1.0, 'xlim': [-0.2,1.2], 'ylim': [-0.2,1.2]})
rounded_verts = patches.PathPatch(rounded_verts, facecolor='orange', lw=2)
ax.add_patch(rounded_verts)
For your example, you would need to specify an intermediate point which uses the x-coordinate
from Point1 and the y-coordinate
from Point2.
The matplotlib path tutorial provides a detailed description of how paths can be made:
http://matplotlib.org/users/path_tutorial.html