如何在 matplotlib 图上的鼠标点击之间画线?
How to draw lines between mouseclicks on a matplotlib plot?
This answer shows an excellent way of getting coordinates of mouse clicks on a matplotlib plot using mpl_point_clicker.
点击几下,此代码:
import numpy as np
import matplotlib.pyplot as plt
from mpl_point_clicker import clicker
fig, ax = plt.subplots(constrained_layout=True)
ax.plot(np.sin(np.arange(200)/(5*np.pi)))
klicker = clicker(ax, ["event"], markers=["x"])
plt.show()
print(klicker.get_positions())
我可以制作这个情节:
和这个文本输出:
{'event': array([[ 5.83720666e+00, -5.73988654e-01],
[ 2.46956149e+01, -1.41575199e-02],
[ 5.20403030e+01, 5.70227612e-01],
[ 8.55139728e+01, 7.56837990e-01],
[ 1.30302686e+02, 3.73795635e-01],
[ 1.69433877e+02, -2.40054293e-01],
[ 2.01493167e+02, -5.05237462e-01]])}
我可以用它来制作这个情节:
使用此代码:
import numpy as np
import matplotlib.pyplot as plt
from mpl_point_clicker import clicker
fig, ax = plt.subplots(constrained_layout=True)
ax.plot(np.sin(np.arange(200)/(5*np.pi)))
klicker = clicker(ax, ["event"], markers=["x"])
data = \
np.array([[ 5.83720666e+00, -5.73988654e-01],
[ 2.46956149e+01, -1.41575199e-02],
[ 5.20403030e+01, 5.70227612e-01],
[ 8.55139728e+01, 7.56837990e-01],
[ 1.30302686e+02, 3.73795635e-01],
[ 1.69433877e+02, -2.40054293e-01],
[ 2.01493167e+02, -5.05237462e-01]])
plt.plot(data[:,0],data[:,1],c='r')
plt.show()
print(klicker.get_positions())
但是,我想在单击绘图时绘制这条线。也就是说,当我点击第一个图上的图表时,我不想画点,我想在我点击的点之间画一条线。我希望最终结果看起来类似于我的第二个情节,但不需要第二个脚本来创建该情节。如果我点击绘图上的某个新位置,红线应该会延伸到这个新位置。作为文本输出,我想要我点击的坐标,就像上面的例子一样。
如何在 Python 中实现?
This answer shows an excellent way of getting coordinates of mouse clicks on a matplotlib plot using mpl_point_clicker.
点击几下,此代码:
import numpy as np
import matplotlib.pyplot as plt
from mpl_point_clicker import clicker
fig, ax = plt.subplots(constrained_layout=True)
ax.plot(np.sin(np.arange(200)/(5*np.pi)))
klicker = clicker(ax, ["event"], markers=["x"])
plt.show()
print(klicker.get_positions())
我可以制作这个情节:
和这个文本输出:
{'event': array([[ 5.83720666e+00, -5.73988654e-01],
[ 2.46956149e+01, -1.41575199e-02],
[ 5.20403030e+01, 5.70227612e-01],
[ 8.55139728e+01, 7.56837990e-01],
[ 1.30302686e+02, 3.73795635e-01],
[ 1.69433877e+02, -2.40054293e-01],
[ 2.01493167e+02, -5.05237462e-01]])}
我可以用它来制作这个情节:
使用此代码:
import numpy as np
import matplotlib.pyplot as plt
from mpl_point_clicker import clicker
fig, ax = plt.subplots(constrained_layout=True)
ax.plot(np.sin(np.arange(200)/(5*np.pi)))
klicker = clicker(ax, ["event"], markers=["x"])
data = \
np.array([[ 5.83720666e+00, -5.73988654e-01],
[ 2.46956149e+01, -1.41575199e-02],
[ 5.20403030e+01, 5.70227612e-01],
[ 8.55139728e+01, 7.56837990e-01],
[ 1.30302686e+02, 3.73795635e-01],
[ 1.69433877e+02, -2.40054293e-01],
[ 2.01493167e+02, -5.05237462e-01]])
plt.plot(data[:,0],data[:,1],c='r')
plt.show()
print(klicker.get_positions())
但是,我想在单击绘图时绘制这条线。也就是说,当我点击第一个图上的图表时,我不想画点,我想在我点击的点之间画一条线。我希望最终结果看起来类似于我的第二个情节,但不需要第二个脚本来创建该情节。如果我点击绘图上的某个新位置,红线应该会延伸到这个新位置。作为文本输出,我想要我点击的坐标,就像上面的例子一样。
如何在 Python 中实现?