.. note:: :class: sphx-glr-download-link-note Click :ref:`here ` to download the full example code .. rst-class:: sphx-glr-example-title .. _sphx_glr_gallery_event_handling_ginput_manual_clabel_sgskip.py: ===================== Interactive functions ===================== 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). See also ginput_demo.py .. code-block:: python from __future__ import print_function 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 .. code-block:: python 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 .. code-block:: python # 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 .. code-block:: python 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() .. _sphx_glr_download_gallery_event_handling_ginput_manual_clabel_sgskip.py: .. only :: html .. container:: sphx-glr-footer :class: sphx-glr-footer-example .. container:: sphx-glr-download :download:`Download Python source code: ginput_manual_clabel_sgskip.py ` .. container:: sphx-glr-download :download:`Download Jupyter notebook: ginput_manual_clabel_sgskip.ipynb ` .. only:: html .. rst-class:: sphx-glr-signature Keywords: matplotlib code example, codex, python plot, pyplot `Gallery generated by Sphinx-Gallery `_