Velocity Reviews

Velocity Reviews (http://www.velocityreviews.com/forums/index.php)
-   Python (http://www.velocityreviews.com/forums/f43-python.html)
-   -   Plot a function with matplotlib? (http://www.velocityreviews.com/forums/t946371-plot-a-function-with-matplotlib.html)

Steven D'Aprano 05-19-2012 01:59 AM

Plot a function with matplotlib?
 
I have matplotlib and iPython, and want to plot a function over an
equally-spaced range of points.

That is to say, I want to say something like this:

plot(func, start, end)

rather than generating the X and Y values by hand, and plotting a scatter
graph. All the examples I've seen look something like this:

from pylab import *
import numpy as np
t = arange(0.0, 2.0+0.01, 0.01) # generate x-values
s = sin(t*pi) # and y-values
plot(t, s)
show()


which is fine for what it is, but I'm looking for an interface closer to
what my HP graphing calculator would use, i.e. something like this:


plot(lambda x: sin(x*pi), # function or expression to plot,
start=0.0,
end=2.0,
)

and have step size taken either from some default, or better still,
automatically calculated so one point is calculated per pixel.

Is there a way to do this in iPython or matplotlib?


--
Steven

Alex van der Spek 05-19-2012 01:35 PM

Re: Plot a function with matplotlib?
 
On Sat, 19 May 2012 01:59:59 +0000, Steven D'Aprano wrote:

> I have matplotlib and iPython, and want to plot a function over an
> equally-spaced range of points.
>
> That is to say, I want to say something like this:
>
> plot(func, start, end)
>
> rather than generating the X and Y values by hand, and plotting a
> scatter graph. All the examples I've seen look something like this:
>
> from pylab import *
> import numpy as np
> t = arange(0.0, 2.0+0.01, 0.01) # generate x-values s = sin(t*pi) #
> and y-values
> plot(t, s)
> show()
>
>
> which is fine for what it is, but I'm looking for an interface closer to
> what my HP graphing calculator would use, i.e. something like this:
>
>
> plot(lambda x: sin(x*pi), # function or expression to plot,
> start=0.0,
> end=2.0,
> )
>
> and have step size taken either from some default, or better still,
> automatically calculated so one point is calculated per pixel.
>
> Is there a way to do this in iPython or matplotlib?


Not to my knowledge unless you code it yourself.

However in gnuplot (www.gnuplot.info)

gnuplot>>> set xrange[start:end]
gnuplot>>> foo(x)=mycomplicatedfunction(x)
gnuplot>>> plot foo(x)

or shorter still

gnuplot>>> plot [start:end] foo(x)

without the need to set the xrange in advance.


Miki Tebeka 05-19-2012 02:22 PM

Re: Plot a function with matplotlib?
 
> I'm looking for an interface closer to
> what my HP graphing calculator would use, i.e. something like this:
>
>
> plot(lambda x: sin(x*pi), # function or expression to plot,
> start=0.0,
> end=2.0,
> )
>
> and have step size taken either from some default, or better still,
> automatically calculated so one point is calculated per pixel.
>
> Is there a way to do this in iPython or matplotlib?

I don't think there is, but using range and list comprehension you can write a little utility function that does that:

HTH
--
Miki Tebeka <miki.tebeka@gmail.com>
http://pythonwise.blogspot.com

def simplot(fn, start, end):
xs = range(start, end+1)
plot(xs, [fn(x) for x in xs)])


All times are GMT. The time now is 06:18 AM.

Powered by vBulletin®. Copyright ©2000 - 2014, vBulletin Solutions, Inc.
SEO by vBSEO ©2010, Crawlability, Inc.