如何用Python绘制多边形?

W.F*_*Fan 10 python

我有以下格式输入x,y坐标值:

[[1,1], [2,1], [2,2], [1,2], [0.5,1.5]]
Run Code Online (Sandbox Code Playgroud)

我想绘制多边形,但我不知道如何绘制它们!

谢谢

小智 21

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.patches import Polygon

y = np.array([[1,1], [2,1], [2,2], [1,2], [0.5,1.5]])

p = Polygon(y, facecolor = 'k')

fig,ax = plt.subplots()

ax.add_patch(p)
ax.set_xlim([0,3])
ax.set_ylim([0,3])
plt.show()
Run Code Online (Sandbox Code Playgroud)


Shr*_*ish 12

matplotlib.patches有一个名为 的函数Polygon,它可以导入为from matplotlib.patches import Polygon. 您可以使用add_patch轴对象的方法来绘制多边形。

from matplotlib.patches import Polygon
import matplotlib.pyplot as plt

polygon1 = Polygon([(0,5), (1,1), (3,0),])

fig, ax = plt.subplots(1,1)

ax.add_patch(polygon1)

plt.ylim(0,6)
plt.xlim(0,6)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述


Jul*_*ien 10

运用 matplotlib.pyplot

import matplotlib.pyplot as plt

coord = [[1,1], [2,1], [2,2], [1,2], [0.5,1.5]]
coord.append(coord[0]) #repeat the first point to create a 'closed loop'

xs, ys = zip(*coord) #create lists of x and y values

plt.figure()
plt.plot(xs,ys) 
plt.show() # if you need...
Run Code Online (Sandbox Code Playgroud)

  • 也许您将 plt.show() 添加到您的代码中。否则只是复制粘贴的人将看不到任何内容 (3认同)

Nur*_*jan 10

绘制多边形的另一种方法是:

import PIL.ImageDraw as ImageDraw
import PIL.Image as Image

image = Image.new("RGB", (640, 480))

draw = ImageDraw.Draw(image)

# points = ((1,1), (2,1), (2,2), (1,2), (0.5,1.5))
points = ((100, 100), (200, 100), (200, 200), (100, 200), (50, 150))
draw.polygon((points), fill=200)

image.show()
Run Code Online (Sandbox Code Playgroud)

请注意,您需要安装枕头库.另外,我将你的坐标放大了100倍,这样我们就可以在640 x 480的屏幕上看到多边形.

希望这可以帮助.


Бог*_*пир 5

另外,如果您在窗口上绘图,请使用以下命令:

dots = [[1,1], [2,1], [2,2], [1,2], [0.5,1.5]]
from tkinter import Canvas
c = Canvas(width=750, height=750)
c.pack()
out = []
for x,y in dots:
    out += [x*250, y*250]
c.create_polygon(*out, fill='#aaffff')#fill with any color html or name you want, like fill='blue'
c.update()
Run Code Online (Sandbox Code Playgroud)

或者你也可以使用这个:

dots = [[1,1], [2,1], [2,2], [1,2], [0.5,1.5]]
out = []
for x,y in dots:
    out.append([x*250, y*250])
import pygame, sys
from pygame.locals import *
pygame.init()
DISPLAYSURF = pygame.display.set_mode((750, 750), 0, 32)
pygame.display.set_caption('WindowName')
DISPLAYSURF.fill((255,255,255))#< ; \/ - colours
pygame.draw.polygon(DISPLAYSURF, (0, 255,0), out)
while True:
    for event in pygame.event.get():
        if event.type == QUIT:
            pygame.quit()
            sys.exit()
    pygame.display.update()
Run Code Online (Sandbox Code Playgroud)

第一个需要tkinter,第二个pygame。第一个加载速度更快,第二个绘制速度更快,如果您将DISPLAYSURF.fillpygame.draw.polygon与稍微不同的坐标放入循环中,它将比 tkinter 中的相同内容更好。因此,如果您的多边形在飞行和弹跳,请使用第二个,但如果它只是稳定的东西,请先使用。另外,在 python2 中使用from Tkinter,而不是from tkinter. 我已经在 raspberrypi3 上检查过这段代码,它有效。

- - - - - - 编辑 - - - - - -

关于 PIL 和 PYPLOT 方法的更多信息,请参阅另一个答案:

matplotlib使用tkinter,也许matplotlib更容易使用,但它基本上是凉爽的tkinter窗口。

PIL在这种情况下使用imagemagick,这是一个非常好的图像编辑工具

如果您还需要对图像应用效果,请使用PIL.

如果您需要更难的数学数字,请使用matplotlib.pyplot.

对于动画,请使用pygame.

对于您不知道做某事的更好方法的所有内容,请使用tkinter.

tkinterinit 很快。pygame更新很快。pyplot只是一个几何工具。