以下程序, 千万不要在 jupyter notebook 中测试, 可以使用 pycharm 测试
import timeimport numpy as npimport matplotlib.pyplot as pltdef tellme(s):print(s)plt.title(s, fontsize=16)plt.draw()plt.clf()plt.setp(plt.gca(), autoscale_on=False)tellme('You will define a triangle, click to begin')plt.waitforbuttonpress()while True:pts = []while len(pts) < 3:tellme('Select 3 corners with mouse')pts = np.asarray(plt.ginput(3, timeout=-1))if len(pts) < 3:tellme('Too few points, starting over')time.sleep(1) # Wait a secondph = plt.fill(pts[:, 0], pts[:, 1], 'r', lw=2)tellme('Happy? Key click for yes, mouse click for no')if plt.waitforbuttonpress():break# Get rid of fillfor p in ph:p.remove()# Define a nice function of distance from individual ptsdef f(x, y, pts):z = np.zeros_like(x)for p in pts:z = z + 1 / (np.sqrt((x - p[0]) ** 2 + (y - p[1]) ** 2))return 1 / zX, Y = np.meshgrid(np.linspace(-1, 1, 51), np.linspace(-1, 1, 51))Z = f(X, Y, pts)CS = plt.contour(X, Y, Z, 20)tellme('Use mouse to select contour label locations, middle button to finish')CL = plt.clabel(CS, manual=True)tellme('Now do a nested zoom, click to begin')plt.waitforbuttonpress()while True:tellme('Select two corners of zoom, middle mouse button to finish')pts = plt.ginput(2, timeout=-1)if len(pts) < 2:break(x0, y0), (x1, y1) = ptsxmin, xmax = sorted([x0, x1])ymin, ymax = sorted([y0, y1])plt.xlim(xmin, xmax)plt.ylim(ymin, ymax)tellme('All Done!')plt.show()

参考:
