Matplotlib补丁-圆形似乎是椭圆形

时间:2020-02-28 09:23:06

标签: python matplotlib

我正在尝试创建和绘制六边形网格。为此,我定义了以下函数:

def create_hexagon(center):
        INRADIUS = 0.5
        CIRCUMRADIUS = INRADIUS / math.cos(math.radians(30))
        pt1 = [center[0], center[1] + CIRCUMRADIUS]
        pt4 = [center[0], center[1] - CIRCUMRADIUS]
        pt2 = [center[0] + INRADIUS, center[1]+CIRCUMRADIUS/2]
        pt6 = [center[0] - INRADIUS, center[1]+CIRCUMRADIUS/2]
        pt3 = [center[0] + INRADIUS, center[1]-CIRCUMRADIUS/2]
        pt5 = [center[0] - INRADIUS, center[1]-CIRCUMRADIUS/2]
        points = [pt1, pt2, pt3, pt4, pt5, pt6]
        return points

我知道,这里发生了很多几何图形,但是我很确定这6个点是根据中心点正确描述的。如果您能想到比单独描述这6点更好的方法,请告诉我! 接下来,我将遍历包含所有中心点的列表。然后,我继续在每个中心周围绘制一个六边形:

for pt in centers:
    points = create_hexagon(pt)
    hexagon = plt.Polygon(points, fill=None, edgecolor='k')
    plt.gca().add_patch(hexagon)
    circle = plt.Circle(pt, 0.5 / math.cos(math.radians(30)), fill=None)
    plt.gca().add_patch(circle)

由于我的绘图似乎不正确,因此我也在每个中心周围画了一个圆。这个圆似乎不是一个圆,而是一个椭圆: enter image description here 放大时更明显: enter image description here

为什么我没有圈子?

1 个答案:

答案 0 :(得分:0)

您的计算还可以,唯一不好的是比例尺(x轴不作为y轴刻度)。

只需添加:

plt.xlim(0, 4.5)
plt.ylim(0, 3.5)
plt.gca().set_aspect('equal', adjustable='box')
plt.show()