计算和显示五边形

问题描述 投票:0回答:1

我想用python计算并显示一些随机点的凸壳。

这是我目前的代码。

import numpy as np
import random
import matplotlib.pyplot as plt
import cv2

points = np.random.rand(25,2)   

hull = ConvexHull(points)

plt.plot(points[:,0], points[:,1], 'o',color='c')

for simplex in hull.simplices:
    plt.plot(points[simplex, 0], points[simplex, 1], 'r')

plt.plot(points[hull.vertices,0], points[hull.vertices,1], 'r', lw=-1)
plt.plot(points[hull.vertices[0],0], points[hull.vertices[0],1], 'r-')
plt.show()

我的问题:

  • 我如何改变X,Y标签和0到9之间的点数限制?例如 (0,1,2,3,4,5,6,7,8,9)
  • 如何在凸形体上用圆圈标记点?如例
python matplotlib scipy convex-hull
1个回答
1
投票

替换 np.rand()randint(0, 10) 将会产生整数坐标,从 0,1,...9.

使用'.'作为标记,将导致给定点的标记更小。

使用'o'作为标记,设置markeredgecolor,并将主色设置为'none',将产生一个圆形标记,可用于船体上的点。标记的大小可以通过以下方式调整 markersize=.

fig, axes = plt.subplots(ncols=..., nrows=...) 是一种创建多个子图的方便方法。

下面是一些最小的例子的代码。

from scipy.spatial import ConvexHull
import matplotlib.pyplot as plt
import numpy as np

points = np.random.randint(0, 10, size=(15, 2))  # Random points in 2-D

hull = ConvexHull(points)

fig, (ax1, ax2) = plt.subplots(ncols=2, figsize=(10, 3))

for ax in (ax1, ax2):
    ax.plot(points[:, 0], points[:, 1], '.', color='k')
    if ax == ax1:
        ax.set_title('Given points')
    else:
        ax.set_title('Convex hull')
        for simplex in hull.simplices:
            ax.plot(points[simplex, 0], points[simplex, 1], 'c')
        ax.plot(points[hull.vertices, 0], points[hull.vertices, 1], 'o', mec='r', color='none', lw=1, markersize=10)
    ax.set_xticks(range(10))
    ax.set_yticks(range(10))
plt.show()

resulting plot

PS: 为了在不同的窗口中显示这些图:

from scipy.spatial import ConvexHull
import matplotlib.pyplot as plt
import numpy as np

points = np.random.randint(0, 10, size=(15, 2))  # Random points in 2-D
hull = ConvexHull(points)
for plot_id in (1, 2):
    fig, ax = plt.subplots(ncols=1, figsize=(5, 3))
    ax.plot(points[:, 0], points[:, 1], '.', color='k')
    if plot_id == 1:
        ax.set_title('Given points')
    else:
        ax.set_title('Convex hull')
        for simplex in hull.simplices:
            ax.plot(points[simplex, 0], points[simplex, 1], 'c')
        ax.plot(points[hull.vertices, 0], points[hull.vertices, 1], 'o', mec='r', color='none', lw=1, markersize=10)
    ax.set_xticks(range(10))
    ax.set_yticks(range(10))
    plt.show()
© www.soinside.com 2019 - 2024. All rights reserved.