gpt4 book ai didi

python - 如何将用户在 Matplotlib 中输入的点传递给 np.array?

转载 作者:太空宇宙 更新时间:2023-11-04 00:33:24 25 4
gpt4 key购买 nike

我想创建一个程序,允许用户首先在 Matplotlib 绘图中输入点,然后使用这些点创建 Voronoi 图。

弄清楚了 2 个部分,但没有联系。如何传递用户输入的点并在 Voronoi 部分使用它? (我只需要知道如何将 points = np.random.rand(20,2) 更改为用户输入的点。)

绘制点:

import matplotlib.pyplot as plt

fig = plt.figure()
ax = fig.add_subplot(111)
ax.set_xlim([0, 10])
ax.set_ylim([0, 10])

def onclick(event):
print('x=%d, y=%d, xdata=%f, ydata=%f' %
(event.x, event.y, event.xdata, event.ydata))
plt.plot(event.xdata, event.ydata, 'bo')
fig.canvas.draw()

cid = fig.canvas.mpl_connect('button_press_event', onclick)
plt.show()`

创建 Voronoi 图:

import numpy as np
import matplotlib.pyplot as plt
from scipy.spatial import Voronoi, voronoi_plot_2d

fig = plt.figure()

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

vor = Voronoi(points)

voronoi_plot_2d(vor)

plt.show()

最佳答案

您可以使用一个类来存储点,然后在同一图中绘制图表。在以下示例中,您将使用鼠标左键放置点并单击鼠标右键绘制 voronoi 图。如果您稍后想向图中添加新点,您可以这样做。

import numpy as np
import matplotlib.pyplot as plt
from scipy.spatial import Voronoi, voronoi_plot_2d

fig, ax = plt.subplots()
ax.set_xlim([0, 10])
ax.set_ylim([0, 10])

class V():
def __init__(self, ax = None):
self.ax = ax
if not self.ax: self.ax = plt.gca()
tx = "left click to place points\nright click to plot voronoi diagram"
self.text = self.ax.text(0.1,0.9, tx, transform=self.ax.transAxes,
ha="left", va="top")
self.cid = fig.canvas.mpl_connect('button_press_event', self.onclick)
self.points = []

def onclick(self, event):
self.text.set_visible(False)
if event.button == 1:
print('x=%d, y=%d, xdata=%f, ydata=%f' %
(event.x, event.y, event.xdata, event.ydata))
plt.plot(event.xdata, event.ydata, 'bo')
self.points.append((event.xdata, event.ydata))
else:
self.voronoi()
fig.canvas.draw()

def voronoi(self):
self.ax.clear()
vor = Voronoi(self.points)
voronoi_plot_2d(vor, ax=self.ax)


v = V(ax=ax)
plt.show()

enter image description here

关于python - 如何将用户在 Matplotlib 中输入的点传递给 np.array?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45080821/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com