在现有图形上绘制,Python Matplotlib

1 投票
1 回答
1826 浏览
提问于 2025-05-01 15:32

我正在用matplotlib写一个程序,首先绘制一个基本的图表,然后在上面添加一些点。我想做的是把鼠标放在图表上的某个点上,然后点击来添加点。不过,我找不到任何清晰的资料来说明在初始图表绘制后,如何处理鼠标点击事件来输入点。以下是我目前的代码。

import matplotlib.pyplot as plt
import numpy as npy
x,y,vx,vy=npy.loadtxt('issmplotdat.txt',delimiter=',',unpack=True)
elements=npy.loadtxt('issmplotdatelements.txt',delimiter=',')

vel=npy.sqrt(vx**2+vy**2)

fig = plt.figure()
plt.tricontourf(x,y,elements,vel)
plt.hold(True)
plt.plot(3,9, 'ro')

def on_keyboard(event):
    print "you pressed", event.key, "\nat:", event.xdata, event.ydata
    plt.plot(9, 9, 'ro')
    print "plotted"

def on_click(event):
    print('ehllo')
    print 'you pressed:', event.button, '\nat:', event.xdata, event.ydata
    plt.plot(event.xdata, event.ydata, 'ro')


zing = fig.canvas.mpl_connect('button_press_event', on_click)
ding = fig.canvas.mpl_connect('key_press_event', on_keyboard)

plt.show()

非常感谢!

-MS

暂无标签

1 个回答

1

你需要在调用绘图函数之后,通过调用 figure.canvas.draw() 来更新图表。

[ 注意,为了做到这一点,你需要访问全局的 fig 变量 ]

所以在你的情况下,on_click 回调函数应该是:

def on_click(event):
    plt.plot(event.xdata, event.ydata, 'ro')
    global fig
    fig.canvas.draw()

enter image description here

撰写回答