# pylab_examples example code: ginput_manual_clabel.pyΒΆ

```#!/usr/bin/env python
# -*- noplot -*-

from __future__ import print_function
"""
This provides examples of uses of interactive functions, such as ginput,
waitforbuttonpress and manual clabel placement.

This script must be run interactively using a backend that has a
graphical user interface (for example, using GTKAgg backend, but not
PS backend).

"""
import time
import matplotlib
import numpy as np
import matplotlib.cm as cm
import matplotlib.mlab as mlab
import matplotlib.pyplot as plt

def tellme(s):
print(s)
plt.title(s,fontsize=16)
plt.draw()

##################################################
# Define a triangle by clicking three points
##################################################
plt.clf()
plt.axis([-1.,1.,-1.,1.])
plt.setp(plt.gca(),autoscale_on=False)

tellme('You will define a triangle, click to begin')

plt.waitforbuttonpress()

happy = False
while not happy:
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 second

ph = plt.fill( pts[:,0], pts[:,1], 'r', lw=2 )

tellme('Happy? Key click for yes, mouse click for no')

happy = plt.waitforbuttonpress()

# Get rid of fill
if not happy:
for p in ph: p.remove()

##################################################
# Now contour according to distance from triangle
# corners - just an example
##################################################

# Define a nice function of distance from individual pts
def 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/z

X,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 )

##################################################
# Now do a zoom
##################################################
tellme( 'Now do a nested zoom, click to begin' )
plt.waitforbuttonpress()

happy = False
while not happy:
tellme( 'Select two corners of zoom, middle mouse button to finish' )
pts = np.asarray( plt.ginput(2,timeout=-1) )

happy = len(pts) < 2
if happy: break

pts = np.sort(pts,axis=0)
plt.axis( pts.T.ravel() )

tellme('All Done!')
plt.show()
```

Keywords: python, matplotlib, pylab, example, codex (see Search examples)