python - 如何在 matplotlib 图上的鼠标单击之间绘制线条?

标签 python matplotlib

This answer展示了使用 mpl_point_clicker 获取 matplotlib 图上鼠标点击坐标的绝佳方法.

只需点击几下即可使用此代码:

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())

我能够绘制这个图:

enter image description here

和这个文本输出:

{'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]])}

我可以用它来生成这个图:

enter image description here

使用此代码:

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 中实现此目的?

最佳答案

API说: **line_kwargs (kwargs) – Line2D 对象(来自 ax.plot)用于生成标记。 line_kwargs 将传递给所有 ax.plot 调用。
那么,让我们设置线条样式:

klicker = clicker(ax, ["event"], markers=["x"], **{"linestyle": "--"})

示例输出:
enter image description here

其他Line2D关键字可以找到here .

关于python - 如何在 matplotlib 图上的鼠标单击之间绘制线条?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70947912/

相关文章:

python - 查找形状内的像素索引 : Opencv and Python

python - 提取文件并在python中同时重命名

pandas - 将 y 轴单位的科学记数法缩写更改为字符串

python-2.7 - 为什么 Python 线图显示 : Don't have an account? plot.ly

python - Matplotlib basemap 绘制纬度/经度

python - 在不使用 scipy.interpolate.griddata 的情况下在 pyplot 中插入 NaN 值

python - 使用 BeautifulSoup 从 HTML 中抓取数字

python - 使用 python 从 Excel 工作表中提取图像

python - Jupyter Notebook 中的 Pytorch 模块错误

python - Matplotlib 删除烛台空间以获取缺失数据