You can subscribe to this list here.
| 2003 |
Jan
|
Feb
|
Mar
|
Apr
|
May
(3) |
Jun
|
Jul
|
Aug
(12) |
Sep
(12) |
Oct
(56) |
Nov
(65) |
Dec
(37) |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2004 |
Jan
(59) |
Feb
(78) |
Mar
(153) |
Apr
(205) |
May
(184) |
Jun
(123) |
Jul
(171) |
Aug
(156) |
Sep
(190) |
Oct
(120) |
Nov
(154) |
Dec
(223) |
| 2005 |
Jan
(184) |
Feb
(267) |
Mar
(214) |
Apr
(286) |
May
(320) |
Jun
(299) |
Jul
(348) |
Aug
(283) |
Sep
(355) |
Oct
(293) |
Nov
(232) |
Dec
(203) |
| 2006 |
Jan
(352) |
Feb
(358) |
Mar
(403) |
Apr
(313) |
May
(165) |
Jun
(281) |
Jul
(316) |
Aug
(228) |
Sep
(279) |
Oct
(243) |
Nov
(315) |
Dec
(345) |
| 2007 |
Jan
(260) |
Feb
(323) |
Mar
(340) |
Apr
(319) |
May
(290) |
Jun
(296) |
Jul
(221) |
Aug
(292) |
Sep
(242) |
Oct
(248) |
Nov
(242) |
Dec
(332) |
| 2008 |
Jan
(312) |
Feb
(359) |
Mar
(454) |
Apr
(287) |
May
(340) |
Jun
(450) |
Jul
(403) |
Aug
(324) |
Sep
(349) |
Oct
(385) |
Nov
(363) |
Dec
(437) |
| 2009 |
Jan
(500) |
Feb
(301) |
Mar
(409) |
Apr
(486) |
May
(545) |
Jun
(391) |
Jul
(518) |
Aug
(497) |
Sep
(492) |
Oct
(429) |
Nov
(357) |
Dec
(310) |
| 2010 |
Jan
(371) |
Feb
(657) |
Mar
(519) |
Apr
(432) |
May
(312) |
Jun
(416) |
Jul
(477) |
Aug
(386) |
Sep
(419) |
Oct
(435) |
Nov
(320) |
Dec
(202) |
| 2011 |
Jan
(321) |
Feb
(413) |
Mar
(299) |
Apr
(215) |
May
(284) |
Jun
(203) |
Jul
(207) |
Aug
(314) |
Sep
(321) |
Oct
(259) |
Nov
(347) |
Dec
(209) |
| 2012 |
Jan
(322) |
Feb
(414) |
Mar
(377) |
Apr
(179) |
May
(173) |
Jun
(234) |
Jul
(295) |
Aug
(239) |
Sep
(276) |
Oct
(355) |
Nov
(144) |
Dec
(108) |
| 2013 |
Jan
(170) |
Feb
(89) |
Mar
(204) |
Apr
(133) |
May
(142) |
Jun
(89) |
Jul
(160) |
Aug
(180) |
Sep
(69) |
Oct
(136) |
Nov
(83) |
Dec
(32) |
| 2014 |
Jan
(71) |
Feb
(90) |
Mar
(161) |
Apr
(117) |
May
(78) |
Jun
(94) |
Jul
(60) |
Aug
(83) |
Sep
(102) |
Oct
(132) |
Nov
(154) |
Dec
(96) |
| 2015 |
Jan
(45) |
Feb
(138) |
Mar
(176) |
Apr
(132) |
May
(119) |
Jun
(124) |
Jul
(77) |
Aug
(31) |
Sep
(34) |
Oct
(22) |
Nov
(23) |
Dec
(9) |
| 2016 |
Jan
(26) |
Feb
(17) |
Mar
(10) |
Apr
(8) |
May
(4) |
Jun
(8) |
Jul
(6) |
Aug
(5) |
Sep
(9) |
Oct
(4) |
Nov
|
Dec
|
| 2017 |
Jan
(5) |
Feb
(7) |
Mar
(1) |
Apr
(5) |
May
|
Jun
(3) |
Jul
(6) |
Aug
(1) |
Sep
|
Oct
(2) |
Nov
(1) |
Dec
|
| 2018 |
Jan
|
Feb
|
Mar
|
Apr
(1) |
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
| 2020 |
Jan
|
Feb
|
Mar
|
Apr
|
May
(1) |
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
| 2025 |
Jan
(1) |
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
| S | M | T | W | T | F | S |
|---|---|---|---|---|---|---|
|
|
|
1
(16) |
2
(31) |
3
(17) |
4
(18) |
5
(7) |
|
6
(5) |
7
(16) |
8
(9) |
9
(19) |
10
(18) |
11
(17) |
12
(7) |
|
13
(6) |
14
(15) |
15
(16) |
16
(15) |
17
(19) |
18
(27) |
19
(10) |
|
20
(5) |
21
(5) |
22
(19) |
23
(7) |
24
(11) |
25
(19) |
26
(1) |
|
27
(36) |
28
(37) |
29
(28) |
30
(36) |
|
|
|
|
From: Eric F. <ef...@ha...> - 2009-09-20 17:32:37
|
Janwillem van Dijk wrote:
> Is it possible to have in Matplotlib.pyplot a log (base 10) scale that
> does go from xmin to xmax where xmin and xmax are not powers of 10 (as
> in Excel and OOCalc)?? E.g. a scale from 20 to 2500 like you can do in
> SciDAVis (and Origin and Mathematica) "Scale/from and Scale/to".
Example using "ipython -pylab":
In [1]:x = arange(2.5, 250)
In [2]:y = x**2
In [3]:semilogy(x, y)
Out[3]:[<matplotlib.lines.Line2D object at 0x91ddc8c>]
In [4]:axis('tight')
Out[4]:(2.5, 249.5, 6.25, 62250.25)
In [5]:axis(ymin=5, ymax=70000)
Out[5]:(2.5, 249.5, 5, 70000)
OK, that was with y, but it works the same with x.
Eric
> I hope so,
> Thanks, Janwillem
>
> ------------------------------------------------------------------------------
> Come build with us! The BlackBerry® Developer Conference in SF, CA
> is the only developer event you need to attend this year. Jumpstart your
> developing skills, take BlackBerry mobile applications to market and stay
> ahead of the curve. Join us from November 9-12, 2009. Register now!
> http://p.sf.net/sfu/devconf
> _______________________________________________
> Matplotlib-users mailing list
> Mat...@li...
> https://lists.sourceforge.net/lists/listinfo/matplotlib-users
|
|
From: rbessa <bes...@ho...> - 2009-09-20 15:16:56
|
Chris,
regarding the print statements in the function you may want to use something
like:
total_matches = (xx == x).sum()
if total_matches != n:
raise ValueError("x values weren't in sorted order")
I also have one question:
in function "pchip_eval" instead of " t = (xvec - x[k]) / h[k]" should not
be "t = (xvec - x[k]) / h" ?
Best regards,
Ricardo Bessa
Chris Michalski-3 wrote:
>
> Recently, I had a need for a monotonic piece-wise cubic Hermite
> interpolator. Matlab provides the function "pchip" (Piecewise Cubic
> Hermite Interpolator), but when I Googled I didn't find any Python
> equivalent. I tried "interp1d()" from scipy.interpolate but this was
> a standard cubic spline using all of the data - not a piece-wise cubic
> spline.
>
> I had access to Matlab documentation, so I spent a some time tracing
> through the code to figure out how I might write a Python duplicate.
> This was an massive exercise in frustration and a potent reminder on
> why I love Python and use Matlab only under duress. I find typical
> Matlab code is poorly documented (if at all) and that apparently
> includes the code included in their official releases. I also find
> Matlab syntax “dated” and the code very difficult to “read”.
>
> Wikipedia to the rescue.
>
> Not to be deterred, I found a couple of very well written Wikipedia
> entries, which explained in simple language how to compute the
> interpolant. Hats off to whoever wrote these entries – they are
> excellent. The result was a surprising small amount of code
> considering the Matlab code was approaching 10 pages of
> incomprehensible code. Again - strong evidence that things are just
> better in Python...
>
> Offered for those who might have the same need – a Python pchip()
> equivalent ==> pypchip(). Since I'm not sure how attachments work (or
> if they work at all...), I copied the code I used below, followed by a
> PNG showing "success":
>
> #
> # pychip.py
> # Michalski
> # 20090818
> #
> # Piecewise cubic Hermite interpolation (monotonic...) in Python
> #
> # References:
> #
> # Wikipedia: Monotone cubic interpolation
> # Cubic Hermite spline
> #
> # A cubic Hermte spline is a third degree spline with each
> polynomial of the spline
> # in Hermite form. The Hermite form consists of two control points
> and two control
> # tangents for each polynomial. Each interpolation is performed on
> one sub-interval
> # at a time (piece-wise). A monotone cubic interpolation is a
> variant of cubic
> # interpolation that preserves monotonicity of the data to be
> interpolated (in other
> # words, it controls overshoot). Monotonicity is preserved by
> linear interpolation
> # but not by cubic interpolation.
> #
> # Use:
> #
> # There are two separate calls, the first call, pchip_init(),
> computes the slopes that
> # the interpolator needs. If there are a large number of points to
> compute,
> # it is more efficient to compute the slopes once, rather than for
> every point
> # being evaluated. The second call, pchip_eval(), takes the slopes
> computed by
> # pchip_init() along with X, Y, and a vector of desired "xnew"s and
> computes a vector
> # of "ynew"s. If only a handful of points is needed, pchip() is a
> third function
> # which combines a call to pchip_init() followed by pchip_eval().
> #
>
> import pylab as P
>
> #=========================================================
> def pchip(x, y, xnew):
>
> # Compute the slopes used by the piecewise cubic Hermite
> interpolator
> m = pchip_init(x, y)
>
> # Use these slopes (along with the Hermite basis function) to
> interpolate
> ynew = pchip_eval(x, y, xnew)
>
> return ynew
>
> #=========================================================
> def x_is_okay(x,xvec):
>
> # Make sure "x" and "xvec" satisfy the conditions for
> # running the pchip interpolator
>
> n = len(x)
> m = len(xvec)
>
> # Make sure "x" is in sorted order (brute force, but works...)
> xx = x.copy()
> xx.sort()
> total_matches = (xx == x).sum()
> if total_matches != n:
> print "*" * 50
> print "x_is_okay()"
> print "x values weren't in sorted order --- aborting"
> return False
>
> # Make sure 'x' doesn't have any repeated values
> delta = x[1:] - x[:-1]
> if (delta == 0.0).any():
> print "*" * 50
> print "x_is_okay()"
> print "x values weren't monotonic--- aborting"
> return False
>
> # Check for in-range xvec values (beyond upper edge)
> check = xvec > x[-1]
> if check.any():
> print "*" * 50
> print "x_is_okay()"
> print "Certain 'xvec' values are beyond the upper end of 'x'"
> print "x_max = ", x[-1]
> indices = P.compress(check, range(m))
> print "out-of-range xvec's = ", xvec[indices]
> print "out-of-range xvec indices = ", indices
> return False
>
> # Second - check for in-range xvec values (beyond lower edge)
> check = xvec< x[0]
> if check.any():
> print "*" * 50
> print "x_is_okay()"
> print "Certain 'xvec' values are beyond the lower end of 'x'"
> print "x_min = ", x[0]
> indices = P.compress(check, range(m))
> print "out-of-range xvec's = ", xvec[indices]
> print "out-of-range xvec indices = ", indices
> return False
>
> return True
>
> #=========================================================
> def pchip_eval(x, y, m, xvec):
>
> # Evaluate the piecewise cubic Hermite interpolant with
> monoticity preserved
> #
> # x = array containing the x-data
> # y = array containing the y-data
> # m = slopes at each (x,y) point [computed to preserve
> monotonicity]
> # xnew = new "x" value where the interpolation is desired
> #
> # x must be sorted low to high... (no repeats)
> # y can have repeated values
> #
> # This works with either a scalar or vector of "xvec"
>
> n = len(x)
> mm = len(xvec)
>
> ############################
> # Make sure there aren't problems with the input data
> ############################
> if not x_is_okay(x, xvec):
> print "pchip_eval2() - ill formed 'x' vector!!!!!!!!!!!!!"
>
> # Cause a hard crash...
> STOP_pchip_eval2
>
> # Find the indices "k" such that x[k] < xvec < x[k+1]
>
> # Create "copies" of "x" as rows in a mxn 2-dimensional vector
> xx = P.resize(x,(mm,n)).transpose()
> xxx = xx > xvec
>
> # Compute column by column differences
> z = xxx[:-1,:] - xxx[1:,:]
>
> # Collapse over rows...
> k = z.argmax(axis=0)
>
> # Create the Hermite coefficients
> h = x[k+1] - x[k]
> t = (xvec - x[k]) / h[k]
>
> # Hermite basis functions
> h00 = (2 * t**3) - (3 * t**2) + 1
> h10 = t**3 - (2 * t**2) + t
> h01 = (-2* t**3) + (3 * t**2)
> h11 = t**3 - t**2
>
> # Compute the interpolated value of "y"
> ynew = h00*y[k] + h10*h*m[k] + h01*y[k+1] + h11*h*m[k+1]
>
> return ynew
>
> #=========================================================
> def pchip_init(x,y):
>
> # Evaluate the piecewise cubic Hermite interpolant with
> monoticity preserved
> #
> # x = array containing the x-data
> # y = array containing the y-data
> #
> # x must be sorted low to high... (no repeats)
> # y can have repeated values
> #
> # x input conditioning is assumed but not checked
>
> n = len(x)
>
> # Compute the slopes of the secant lines between successive points
> delta = (y[1:] - y[:-1]) / (x[1:] - x[:-1])
>
> # Initialize the tangents at every points as the average of the
> secants
> m = P.zeros(n, dtype='d')
>
> # At the endpoints - use one-sided differences
> m[0] = delta[0]
> m[n-1] = delta[-1]
>
> # In the middle - use the average of the secants
> m[1:-1] = (delta[:-1] + delta[1:]) / 2.0
>
> # Special case: intervals where y[k] == y[k+1]
>
> # Setting these slopes to zero guarantees the spline connecting
> # these points will be flat which preserves monotonicity
> indices_to_fix = P.compress((delta == 0.0), range(n))
>
> # print "zero slope indices to fix = ", indices_to_fix
>
> for ii in indices_to_fix:
> m[ii] = 0.0
> m[ii+1] = 0.0
>
> alpha = m[:-1]/delta
> beta = m[1:]/delta
> dist = alpha**2 + beta**2
> tau = 3.0 / P.sqrt(dist)
>
> # To prevent overshoot or undershoot, restrict the position vector
> # (alpha, beta) to a circle of radius 3. If (alpha**2 +
> beta**2)>9,
> # then set m[k] = tau[k]alpha[k]delta[k] and m[k+1] =
> tau[k]beta[b]delta[k]
> # where tau = 3/sqrt(alpha**2 + beta**2).
>
> # Find the indices that need adjustment
> over = (dist > 9.0)
> indices_to_fix = P.compress(over, range(n))
>
> # print "overshoot indices to fix... = ", indices_to_fix
>
> for ii in indices_to_fix:
> m[ii] = tau[ii] * alpha[ii] * delta[ii]
> m[ii+1] = tau[ii] * beta[ii] * delta[ii]
>
> return m
>
> #=
> =======================================================================
> def CubicHermiteSpline(x, y, x_new):
>
> # Piecewise Cubic Hermite Interpolation using Catmull-Rom
> # method for computing the slopes.
> #
> # Note - this only works if delta-x is uniform?
>
> # Find the two points which "bracket" "x_new"
> found_it = False
>
> for ii in range(len(x)-1):
> if (x[ii] <= x_new) and (x[ii+1] > x_new):
> found_it = True
> break
>
> if not found_it:
> print
> print "requested x=<%f> outside X range[%f,%f]" % (x_new,
> x[0], x[-1])
> STOP_CubicHermiteSpline()
>
> # Starting and ending data points
> x0 = x[ii]
> x1 = x[ii+1]
>
> y0 = y[ii]
> y1 = y[ii+1]
>
> # Starting and ending tangents (using Catmull-Rom spline method)
>
> # Handle special cases (hit one of the endpoints...)
> if ii == 0:
>
> # Hit lower endpoint
> m0 = (y[1] - y[0])
> m1 = (y[2] - y[0]) / 2.0
>
> elif ii == (len(x) - 2):
>
> # Hit upper endpoints
> m0 = (y[ii+1] - y[ii-1]) / 2.0
> m1 = (y[ii+1] - y[ii])
>
> else:
>
> # Inside the field...
> m0 = (y[ii+1] - y[ii-1])/ 2.0
> m1 = (y[ii+2] - y[ii]) / 2.0
>
> # Normalize to x_new to [0,1] interval
> h = (x1 - x0)
> t = (x_new - x0) / h
>
> # Compute the four Hermite basis functions
> h00 = ( 2.0 * t**3) - (3.0 * t**2) + 1.0
> h10 = ( 1.0 * t**3) - (2.0 * t**2) + t
> h01 = (-2.0 * t**3) + (3.0 * t**2)
> h11 = ( 1.0 * t**3) - (1.0 * t**2)
>
> h = 1
>
> y_new = (h00 * y0) + (h10 * h * m0) + (h01 * y1) + (h11 * h * m1)
>
> return y_new
>
> #==============================================================
> def main():
>
> ############################################################
> # Sine wave test
> ############################################################
>
> # Create a example vector containing a sine wave.
> x = P.arange(30.0)/10.
> y = P.sin(x)
>
> # Interpolate the data above to the grid defined by "xvec"
> xvec = P.arange(250.)/100.
>
> # Initialize the interpolator slopes
> m = pchip_init(x,y)
>
> # Call the monotonic piece-wise Hermite cubic interpolator
> yvec2 = pchip_eval(x, y, m, xvec)
>
> P.figure(1)
> P.plot(x,y, 'ro')
> P.title("pchip() Sin test code")
>
> # Plot the interpolated points
> P.plot(xvec, yvec2, 'b')
>
>
> #########################################################################
> # Step function test...
>
> #########################################################################
>
> P.figure(2)
> P.title("pchip() step function test")
>
> # Create a step function (will demonstrate monotonicity)
> x = P.arange(7.0) - 3.0
> y = P.array([-1.0, -1,-1,0,1,1,1])
>
> # Interpolate using monotonic piecewise Hermite cubic spline
> xvec = P.arange(599.)/100. - 3.0
>
> # Create the pchip slopes slopes
> m = pchip_init(x,y)
>
> # Interpolate...
> yvec = pchip_eval(x, y, m, xvec)
>
> # Call the Scipy cubic spline interpolator
> from scipy.interpolate import interpolate
> function = interpolate.interp1d(x, y, kind='cubic')
> yvec2 = function(xvec)
>
> # Non-montonic cubic Hermite spline interpolator using
> # Catmul-Rom method for computing slopes...
> yvec3 = []
> for xx in xvec:
> yvec3.append(CubicHermiteSpline(x,y,xx))
> yvec3 = P.array(yvec3)
>
> # Plot the results
> P.plot(x, y, 'ro')
> P.plot(xvec, yvec, 'b')
> P.plot(xvec, yvec2, 'k')
> P.plot(xvec, yvec3, 'g')
> P.xlabel("X")
> P.ylabel("Y")
> P.title("Comparing pypchip() vs. Scipy interp1d() vs. non-
> monotonic CHS")
> legends = ["Data", "pypchip()", "interp1d","CHS"]
> P.legend(legends, loc="upper left")
>
> P.show()
>
> ###################################################################
> main()
>
>
>
>
>
>
>
>
>
>
> ------------------------------------------------------------------------------
> Let Crystal Reports handle the reporting - Free Crystal Reports 2008
> 30-Day
> trial. Simplify your report design, integration and deployment - and focus
> on
> what you do best, core application coding. Discover what's new with
> Crystal Reports now. http://p.sf.net/sfu/bobj-july
> _______________________________________________
> Matplotlib-users mailing list
> Mat...@li...
> https://lists.sourceforge.net/lists/listinfo/matplotlib-users
>
>
--
View this message in context: http://www.nabble.com/%22Piecewise-Cubic-Hermite-Interpolating-Polynomial%22-in-python-tp25204843p25530075.html
Sent from the matplotlib - users mailing list archive at Nabble.com.
|
|
From: Sebastian B. <web...@th...> - 2009-09-20 14:20:45
|
Janwillem van Dijk wrote: > Is it possible to have in Matplotlib.pyplot a log (base 10) scale that > does go from xmin to xmax where xmin and xmax are not powers of 10 ... yes. best regards, sebastian. |
|
From: Janwillem v. D. <jwe...@xs...> - 2009-09-20 13:26:03
|
Is it possible to have in Matplotlib.pyplot a log (base 10) scale that does go from xmin to xmax where xmin and xmax are not powers of 10 (as in Excel and OOCalc)?? E.g. a scale from 20 to 2500 like you can do in SciDAVis (and Origin and Mathematica) "Scale/from and Scale/to". I hope so, Thanks, Janwillem |
|
From: Kevin D. <kg...@gm...> - 2009-09-20 01:25:56
|
Thanks for a great library and excellent documentation. I'm using mpl_toolkits.mplot3d.Axes3D (version 0.99.0) to generate a 3D scatter plot and the web examples have been very useful so far. But I have these questions to which I can't find answers in the mailing lists or the website: a) can you programmatically set the viewing angle (azimuth and elevation)? I noticed the ax.get_proj() function, but was hoping there would be an ax.set_proj(elev=..., az=....) function also. b) can you set all 6 sides of the bounding box to show up, instead of 3, but set their faces to be transparent (of course!) Thanks, Kevin |