使用 Matplotlib 绘制矩形

时间:2020-12-23 10:13:12

标签: python matplotlib

我正在编写一个python函数来绘制一个简单的矩形,顶点是参数。好吧,这不能正常工作,我似乎无法找出为什么它到处都是绘图。 编辑: 至于我的进口。所以 sp 是 sympy。至于预期的结果当然是画一个矩形。

%matplotlib inline
import sympy as sp
import numpy as np
import matplotlib.pyplot as plt
import math

def draw_rectangle(P1,P2,P3,P4):
    p1, p2, p3, p4 = sp.Point(P1[0], P1[1]), sp.Point(P2[0], P2[1]), sp.Point(P3[0], P3[1]), 
    sp.Point(P4[0], P4[1])
    plt.plot(p1,p2)
    plt.plot(p2,p3)
    plt.plot(p3,p4)
    plt.plot(p4,p1)

P1=[20,30]
P2=[40,30]
P3=[40,60]
P4=[20,60]
draw_rectangle(P1,P2,P3,P4)

此代码的实际结果 Actual Outcome with this code

1 个答案:

答案 0 :(得分:0)

x-y 坐标的传递在您的代码中混淆了。 p1 的形式仍然与 P1 相同,即 x-y 对。但是 matplotlib plt.plot() 需要一个 x 值列表,后跟一个 y 值列表。因此,这种误解 - matplotlib 将 plt.plot(p1,p2) p1 解释为两个 x 值,将 p2 解释为两个 y 值。因此,我们必须在绘图之前将 x 值和 y 值链接在一起。

import sympy as sp
import matplotlib.pyplot as plt

def draw_rectangle(P1,P2,P3,P4):
    p1, p2 = sp.Point(P1[0], P1[1]), sp.Point(P2[0], P2[1])
    p3, p4 = sp.Point(P3[0], P3[1]), sp.Point(P4[0], P4[1])
    plt.plot(*zip(p1,p2))
    plt.plot(*zip(p2,p3))
    plt.plot(*zip(p3,p4))
    plt.plot(*zip(p4,p1))
    #or alternatively
    #plt.plot(*zip(p1, p2, p3, p4, p1))

P1=[20,30]
P2=[40,30]
P3=[40,60]
P4=[20,60]

draw_rectangle(P1,P2,P3,P4)
plt.show()

示例输出:

enter image description here

但是,目前尚不清楚您为什么在绘图前将数据转换为 sympy 点。您可以直接使用 P1, P2,...,但也许这是我们不知道的其他一些程序部分所必需的。或者您实际上想使用另一个 sympy 函数,而不是 sp.point,但我不会说流利的 sympy,因此无法对此发表评论。

相关问题