Revision: 6242
http://matplotlib.svn.sourceforge.net/matplotlib/?rev=6242&view=rev
Author: jdh2358
Date: 2008-10-17 16:02:52 +0000 (Fri, 17 Oct 2008)
Log Message:
-----------
updates to the FAQ
Modified Paths:
--------------
trunk/matplotlib/doc/faq/howto_faq.rst
trunk/matplotlib/examples/pylab_examples/two_scales.py
Modified: trunk/matplotlib/doc/faq/howto_faq.rst
===================================================================
--- trunk/matplotlib/doc/faq/howto_faq.rst 2008-10-17 15:35:05 UTC (rev
6241)
+++ trunk/matplotlib/doc/faq/howto_faq.rst 2008-10-17 16:02:52 UTC (rev
6242)
@@ -470,4 +470,127 @@
.. htmlonly::
- See :ref:`animation-movie_demo` for a complete example.
+ Josh Lifton provided this example :ref:`animation-movie_demo`, which is
possibly dated since it was written in 2004.
+
+
+.. _howto-twoscale:
+
+Can I have multiple y-axis scales?
+==================================
+
+A frequent request is to have two scales for the left and right
+y-axis, which is possible using :func:`~matplotlib.pyplot.twinx` (more
+than two scales are not currently supported, though it is on the wishq
+list). This works pretty well, though there are some quirks when you
+are trying to interactively pan and zoom, since both scales do not get
+the signals.
+
+The approach :func:`~matplotlib.pyplot.twinx` (and its sister
+:func:`~matplotlib.pyplot.twiny`) uses is to use *2 different axes*,
+turning the axes rectangular frame off on the 2nd axes to keep it from
+obscuring the first, and manually setting the tick locs and labels as
+desired. You can use separate matplotlib.ticker formatters and
+locators as desired since the two axes are independent::
+
+ import numpy as np
+ import matplotlib.pyplot as plt
+
+ fig = plt.figure()
+ ax1 = fig.add_subplot(111)
+ t = np.arange(0.01, 10.0, 0.01)
+ s1 = np.exp(t)
+ ax1.plot(t, s1, 'b-')
+ ax1.set_xlabel('time (s)')
+ ax1.set_ylabel('exp')
+
+ ax2 = ax1.twinx()
+ s2 = np.sin(2*np.pi*t)
+ ax2.plot(t, s2, 'r.')
+ ax2.set_ylabel('sin')
+ plt.show()
+
+
+.. htmlonly::
+
+ See :ref:`api-two_scales` for a complete example
+
+.. _howto-batchmode:
+
+Can I just generate images without having a window popup?
+=====================================================
+
+The easiest way to do this is use an image backend (see
+:ref:`what-is-a-backend`) such as Agg (for PNGs), PDF, SVG or PS. In
+your figure generating script, just place call
+:func:`matplotlib.use` directive before importing pylab or
+pyplot::
+
+ import matplotlib
+ matplotlib.use('Agg')
+ import matplotlib.pyplot as plt
+ plt.plot([1,2,3])
+ plt.savefig('myfig')
+
+
+.. seealso::
+ :ref:`howto-webapp`
+
+ ('SHOW',
+ "What's up with 'show'? Do I have to use it?",
+ """
+
+.. _howto-show
+
+How should I use :func:`~matplotlib.pyplot.show`?
+=================================================
+
+The user interface backends need to start the GUI mainloop, and this
+is what :func:`~matplotlib.pyplot.show` does. It tells matplotlib to
+raise all of the figure windows and start the mainloop. Because the
+mainloop is blocking, you should only call this once per script, at
+the end. If you are using matplotlib to generate images only and do
+not want a user interface window, you can skip it (see
+:ref:`howto-batch` and :ref:`what-is-a-backend`).
+
+
+Because it is expensive to draw, matplotlib does not want to redrawing the
figure
+many times in a script such as the following::
+
+ plot([1,2,3]) # draw here ?
+ xlabel('time') # and here ?
+ ylabel('volts') # and here ?
+ title('a simple plot') # and here ?
+ show()
+
+
+It is *possible* to force matplotlib to draw after every command,
+which is what you usually want when working interactively at the
+python console, but in a script you want to defer all drawing until
+the script has executed (see :ref:`mpl-shell`). This is especially
+important for complex figures that take some time to draw.
+:func:`~matplotlib.pyplot.show` is designed to tell matplotlib that
+you're all done issuing commands and you want to draw the figure now.
+
+.. note::
+
+ :func:`~matplotlib.pyplot.show` should be called at most once per
+ script and it should be the last line of your script. At that
+ point, the GUI takes control of the interpreter. If you want to
+ force a figure draw, use :func:`~matplotlib.pyplot.draw` instead.
+
+Many users are frustrated by show because they want it to be a
+blocking call that raises the figure, pauses the script until the
+figure is closed, and then allows the script to continue running until
+the next figure is created and the next show is made. Something like
+this::
+
+ # WARNING : illustrating how NOT to use show
+ for i in range(10):
+ # make figure i
+ show()
+
+This is not what show does and unfortunately, because doing blocking
+calls across user interfaces can be tricky, is currently unsupported,
+though we have made some pregress towards supporting blocking events.
+
+
Modified: trunk/matplotlib/examples/pylab_examples/two_scales.py
===================================================================
--- trunk/matplotlib/examples/pylab_examples/two_scales.py 2008-10-17
15:35:05 UTC (rev 6241)
+++ trunk/matplotlib/examples/pylab_examples/two_scales.py 2008-10-17
16:02:52 UTC (rev 6242)
@@ -19,20 +19,22 @@
"""
-from pylab import *
+import numpy as np
+import matplotlib.pyplot as plt
-ax1 = subplot(111)
-t = arange(0.01, 10.0, 0.01)
-s1 = exp(t)
-plot(t, s1, 'b-')
-xlabel('time (s)')
-ylabel('exp')
+fig = plt.figure()
+ax1 = fig.add_subplot(111)
+t = np.arange(0.01, 10.0, 0.01)
+s1 = np.exp(t)
+ax1.plot(t, s1, 'b-')
+ax1.set_xlabel('time (s)')
+ax1.set_ylabel('exp')
# turn off the 2nd axes rectangle with frameon kwarg
-ax2 = twinx()
-s2 = sin(2*pi*t)
-plot(t, s2, 'r.')
-ylabel('sin')
-ax2.yaxis.tick_right()
-show()
+ax2 = ax1.twinx()
+s2 = np.sin(2*np.pi*t)
+ax2.plot(t, s2, 'r.')
+ax2.set_ylabel('sin')
+plt.show()
+
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
Matplotlib-checkins mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/matplotlib-checkins