Revision: 7078
http://matplotlib.svn.sourceforge.net/matplotlib/?rev=7078&view=rev
Author: efiring
Date: 2009-05-03 00:09:06 +0000 (Sun, 03 May 2009)
Log Message:
-----------
Added options to plotfile
Modified Paths:
--------------
trunk/matplotlib/CHANGELOG
trunk/matplotlib/examples/pylab_examples/plotfile_demo.py
trunk/matplotlib/lib/matplotlib/pyplot.py
Added Paths:
-----------
trunk/matplotlib/examples/data/data_x_x2_x3.csv
Modified: trunk/matplotlib/CHANGELOG
===================================================================
--- trunk/matplotlib/CHANGELOG 2009-05-01 19:04:06 UTC (rev 7077)
+++ trunk/matplotlib/CHANGELOG 2009-05-03 00:09:06 UTC (rev 7078)
@@ -1,4 +1,7 @@
======================================================================
+2009-05-02 Added options to plotfile based on question from
+ Joseph Smidt and patch by Matthias Michler. - EF
+
2009-05-01 Changed add_artist and similar Axes methods to
return their argument. - EF
Added: trunk/matplotlib/examples/data/data_x_x2_x3.csv
===================================================================
--- trunk/matplotlib/examples/data/data_x_x2_x3.csv
(rev 0)
+++ trunk/matplotlib/examples/data/data_x_x2_x3.csv 2009-05-03 00:09:06 UTC
(rev 7078)
@@ -0,0 +1,11 @@
+ 0 0 0
+ 1 1 1
+ 2 4 8
+ 3 9 27
+ 4 16 64
+ 5 25 125
+ 6 36 216
+ 7 49 343
+ 8 64 512
+ 9 81 729
+10 100 1000
Modified: trunk/matplotlib/examples/pylab_examples/plotfile_demo.py
===================================================================
--- trunk/matplotlib/examples/pylab_examples/plotfile_demo.py 2009-05-01
19:04:06 UTC (rev 7077)
+++ trunk/matplotlib/examples/pylab_examples/plotfile_demo.py 2009-05-03
00:09:06 UTC (rev 7078)
@@ -1,6 +1,7 @@
-from pylab import plotfile, show
+from pylab import plotfile, show, gca
fname = '../data/msft.csv'
+fname2 = '../data/data_x_x2_x3.csv'
# test 1; use ints
plotfile(fname, (0,5,6))
@@ -14,7 +15,20 @@
# test 4; use semilogy for volume
plotfile(fname, (0,5,6), plotfuncs={5:'semilogy'})
-# test 5; use bar for volume
+#test 5; single subplot
+plotfile(fname, ('date', 'open', 'high', 'low', 'close'), subplots=False)
+
+# test 6; labeling, if no names in csv-file
+plotfile(fname2, cols=(0,1,2), delimiter=' ',
+ names=['$x$', '$f(x)=x^2$', '$f(x)=x^3$'])
+
+# test 7; more than one file per figure--illustrated here with a single file
+plotfile(fname2, cols=(0, 1), delimiter=' ')
+plotfile(fname2, cols=(0, 2), newfig=False, delimiter=' ') # use current figure
+gca().set_xlabel(r'$x$')
+gca().set_ylabel(r'$f(x) = x^2, x^3$')
+
+# test 8; use bar for volume
plotfile(fname, (0,5,6), plotfuncs={5:'bar'})
show()
Modified: trunk/matplotlib/lib/matplotlib/pyplot.py
===================================================================
--- trunk/matplotlib/lib/matplotlib/pyplot.py 2009-05-01 19:04:06 UTC (rev
7077)
+++ trunk/matplotlib/lib/matplotlib/pyplot.py 2009-05-03 00:09:06 UTC (rev
7078)
@@ -1448,7 +1448,8 @@
return ret
def plotfile(fname, cols=(0,), plotfuncs=None,
- comments='#', skiprows=0, checkrows=5, delimiter=',',
+ comments='#', skiprows=0, checkrows=5, delimiter=',', names=None,
+ subplots=True, newfig=True,
**kwargs):
"""
Plot the data in *fname*
@@ -1464,18 +1465,28 @@
- If len(*cols*) > 1, the first element will be an identifier for
data for the *x* axis and the remaining elements will be the
- column indexes for multiple subplots
+ column indexes for multiple subplots if *subplots* is *True*
+ (the default), or for lines in a single subplot if *subplots*
+ is *False*.
*plotfuncs*, if not *None*, is a dictionary mapping identifier to
an :class:`~matplotlib.axes.Axes` plotting function as a string.
Default is 'plot', other choices are 'semilogy', 'fill', 'bar',
etc. You must use the same type of identifier in the *cols*
vector as you use in the *plotfuncs* dictionary, eg., integer
- column numbers in both or column names in both.
+ column numbers in both or column names in both. If *subplots*
+ is *False*, then including any function such as 'semilogy'
+ that changes the axis scaling will set the scaling for all
+ columns.
- *comments*, *skiprows*, *checkrows*, and *delimiter* are all passed on to
- :func:`matplotlib.pylab.csv2rec` to load the data into a record array.
+ *comments*, *skiprows*, *checkrows*, *delimiter*, and *names*
+ are all passed on to :func:`matplotlib.pylab.csv2rec` to
+ load the data into a record array.
+ If *newfig* is *True*, the plot always will be made in a new figure;
+ if *False*, it will be made in the current figure if one exists,
+ else in a new figure.
+
kwargs are passed on to plotting functions.
Example usage::
@@ -1484,17 +1495,26 @@
plotfile(fname, (0,1,3))
# plot using column names; specify an alternate plot type for volume
- plotfile(fname, ('date', 'volume', 'adj_close'), plotfuncs={'volume':
'semilogy'})
+ plotfile(fname, ('date', 'volume', 'adj_close'),
+ plotfuncs={'volume': 'semilogy'})
+
+ Note: plotfile is intended as a convenience for quickly plotting
+ data from flat files; it is not intended as an alternative
+ interface to general plotting with pyplot or matplotlib.
"""
- fig = figure()
+ if newfig:
+ fig = figure()
+ else:
+ fig = gcf()
+
if len(cols)<1:
raise ValueError('must have at least one column of data')
if plotfuncs is None:
plotfuncs = dict()
- r = mlab.csv2rec(fname, comments=comments,
- skiprows=skiprows, checkrows=checkrows, delimiter=delimiter)
+ r = mlab.csv2rec(fname, comments=comments, skiprows=skiprows,
+ checkrows=checkrows, delimiter=delimiter, names=names)
def getname_val(identifier):
'return the name and column data for identifier'
@@ -1507,36 +1527,44 @@
raise TypeError('identifier must be a string or integer')
xname, x = getname_val(cols[0])
+ ynamelist = []
if len(cols)==1:
ax1 = fig.add_subplot(1,1,1)
funcname = plotfuncs.get(cols[0], 'plot')
func = getattr(ax1, funcname)
func(x, **kwargs)
- ax1.set_xlabel(xname)
+ ax1.set_ylabel(xname)
else:
N = len(cols)
for i in range(1,N):
- if i==1:
- ax = ax1 = fig.add_subplot(N-1,1,i)
- ax.grid(True)
- else:
- ax = fig.add_subplot(N-1,1,i, sharex=ax1)
- ax.grid(True)
+ if subplots:
+ if i==1:
+ ax = ax1 = fig.add_subplot(N-1,1,i)
+ else:
+ ax = fig.add_subplot(N-1,1,i, sharex=ax1)
+ elif i==1:
+ ax = fig.add_subplot(1,1,1)
+ ax.grid(True)
+
yname, y = getname_val(cols[i])
+ ynamelist.append(yname)
funcname = plotfuncs.get(cols[i], 'plot')
func = getattr(ax, funcname)
func(x, y, **kwargs)
- ax.set_ylabel(yname)
+ if subplots:
+ ax.set_ylabel(yname)
if ax.is_last_row():
ax.set_xlabel(xname)
else:
ax.set_xlabel('')
+ if not subplots:
+ ax.legend(ynamelist, loc='best')
if xname=='date':
fig.autofmt_xdate()
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
------------------------------------------------------------------------------
Register Now & Save for Velocity, the Web Performance & Operations
Conference from O'Reilly Media. Velocity features a full day of
expert-led, hands-on workshops and two days of sessions from industry
leaders in dedicated Performance & Operations tracks. Use code vel09scf
and Save an extra 15% before 5/3. http://p.sf.net/sfu/velocityconf
_______________________________________________
Matplotlib-checkins mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/matplotlib-checkins