matplotlib - 多边形边缘的半径 - 是否可能?

Tom*_*zyk 6 python polygon matplotlib

我在matplotlib中绘制一个多边形.我输入了所有坐标点.在某些点之间我想要'圆形'或'径向'边缘而不是直线(比如图中的点1和2).这可能吗?如果不是,最有效的绘制方法是什么?

示例图

编辑:Rutger的解决方案运作良好.

在此输入图像描述

Rut*_*ies 7

您可以通过从路径制作多边形来使用弧。

一个普通的正方形:

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)
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

圆角正方形可以用以下方法制作:

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)
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

对于您的示例,您需要指定一个使用x-coordinatefrom Point1 和y-coordinatefrom Point2。

matplotlib 路径教程提供了如何制作路径的详细说明:http : //matplotlib.org/users/path_tutorial.html