From a7df70334d978891c0295327d9704ea908dcb29d Mon Sep 17 00:00:00 2001 From: Eric Firing Date: Sat, 25 May 2013 13:20:28 -1000 Subject: [PATCH 01/11] mlab.FIFOBuffer: remove fossil line referring to nonexistent method --- lib/matplotlib/mlab.py | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/matplotlib/mlab.py b/lib/matplotlib/mlab.py index 023ca8dbeb2b..bb0f8641bd6e 100644 --- a/lib/matplotlib/mlab.py +++ b/lib/matplotlib/mlab.py @@ -1308,7 +1308,6 @@ def update_datalim_to_current(self): x, y = self.asarrays() self.dataLim.update_from_data(x, y, True) - self.dataLim.update_numerix(x, y, True) def movavg(x,n): """ From 5e2e0fb602a015636f685dae6791efc67629188e Mon Sep 17 00:00:00 2001 From: Michael Droettboom Date: Tue, 28 May 2013 07:54:06 -0700 Subject: [PATCH 02/11] Merge pull request #2069 from jakevdp/anim_fix BUG: pass kwargs to TimedAnimation --- lib/matplotlib/animation.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/matplotlib/animation.py b/lib/matplotlib/animation.py index c1822df960e6..1d935f423920 100644 --- a/lib/matplotlib/animation.py +++ b/lib/matplotlib/animation.py @@ -253,7 +253,7 @@ def isAvailable(cls): class FileMovieWriter(MovieWriter): '`MovieWriter` subclass that handles writing to a file.' def __init__(self, *args, **kwargs): - MovieWriter.__init__(self, *args) + MovieWriter.__init__(self, *args, **kwargs) self.frame_format = rcParams['animation.frame_format'] def setup(self, fig, outfile, dpi, frame_prefix='_tmp', clear_temp=True): From b093b8c644f63cf761fed9bec7f6693fddd08b3c Mon Sep 17 00:00:00 2001 From: Michael Droettboom Date: Tue, 28 May 2013 10:49:34 -0400 Subject: [PATCH 03/11] Merge branch 'pcolorargs' --- lib/matplotlib/axes.py | 59 +- .../test_transforms/pre_transform_data.pdf | Bin 231249 -> 231401 bytes .../test_transforms/pre_transform_data.png | Bin 80872 -> 80945 bytes .../test_transforms/pre_transform_data.svg | 1576 ++++++++--------- lib/matplotlib/tests/test_axes.py | 17 +- lib/matplotlib/tests/test_transforms.py | 54 +- 6 files changed, 876 insertions(+), 830 deletions(-) diff --git a/lib/matplotlib/axes.py b/lib/matplotlib/axes.py index 8b8f2587c3c1..1f93652e09dd 100644 --- a/lib/matplotlib/axes.py +++ b/lib/matplotlib/axes.py @@ -7316,13 +7316,35 @@ def imshow(self, X, cmap=None, norm=None, aspect=None, return im - def _pcolorargs(self, funcname, *args): + @staticmethod + def _pcolorargs(funcname, *args, **kw): + # This takes one kwarg, allmatch. + # If allmatch is True, then the incoming X, Y, C must + # have matching dimensions, taking into account that + # X and Y can be 1-D rather than 2-D. This perfect + # match is required for Gouroud shading. For flat + # shading, X and Y specify boundaries, so we need + # one more boundary than color in each direction. + # For convenience, and consistent with Matlab, we + # discard the last row and/or column of C if necessary + # to meet this condition. This is done if allmatch + # is False. + + allmatch = kw.pop("allmatch", False) + if len(args) == 1: C = args[0] numRows, numCols = C.shape - X, Y = np.meshgrid(np.arange(numCols + 1), np.arange(numRows + 1)) - elif len(args) == 3: + if allmatch: + X, Y = np.meshgrid(np.arange(numCols), np.arange(numRows)) + else: + X, Y = np.meshgrid(np.arange(numCols + 1), + np.arange(numRows + 1)) + return X, Y, C + + if len(args) == 3: X, Y, C = args + numRows, numCols = C.shape else: raise TypeError( 'Illegal arguments to %s; see help(%s)' % (funcname, funcname)) @@ -7339,6 +7361,17 @@ def _pcolorargs(self, funcname, *args): raise TypeError( 'Incompatible X, Y inputs to %s; see help(%s)' % ( funcname, funcname)) + if allmatch: + if not (Nx == numCols and Ny == numRows): + raise TypeError('Dimensions of C %s are incompatible with' + ' X (%d) and/or Y (%d); see help(%s)' % ( + C.shape, Nx, Ny, funcname)) + else: + if not (numCols in (Nx, Nx-1) and numRows in (Ny, Ny-1)): + raise TypeError('Dimensions of C %s are incompatible with' + ' X (%d) and/or Y (%d); see help(%s)' % ( + C.shape, Nx, Ny, funcname)) + C = C[:Ny-1, :Nx-1] return X, Y, C @docstring.dedent_interpd @@ -7439,7 +7472,7 @@ def pcolor(self, *args, **kwargs): x = np.arange(5) y = np.arange(3) - X, Y = meshgrid(x,y) + X, Y = np.meshgrid(x, y) is equivalent to:: @@ -7453,9 +7486,9 @@ def pcolor(self, *args, **kwargs): so if you have:: - C = rand( len(x), len(y)) + C = rand(len(x), len(y)) - then you need:: + then you need to transpose C:: pcolor(X, Y, C.T) @@ -7504,7 +7537,7 @@ def pcolor(self, *args, **kwargs): '1.2', 'shading', alternative='edgecolors', obj_type='option') shading = kwargs.pop('shading', 'flat') - X, Y, C = self._pcolorargs('pcolor', *args) + X, Y, C = self._pcolorargs('pcolor', *args, allmatch=False) Ny, Nx = X.shape # convert to MA, if necessary. @@ -7515,7 +7548,7 @@ def pcolor(self, *args, **kwargs): xymask = (mask[0:-1, 0:-1] + mask[1:, 1:] + mask[0:-1, 1:] + mask[1:, 0:-1]) # don't plot if C or any of the surrounding vertices are masked. - mask = ma.getmaskarray(C)[0:Ny - 1, 0:Nx - 1] + xymask + mask = ma.getmaskarray(C) + xymask newaxis = np.newaxis compress = np.compress @@ -7693,15 +7726,13 @@ def pcolormesh(self, *args, **kwargs): antialiased = kwargs.pop('antialiased', False) kwargs.setdefault('edgecolors', 'None') - X, Y, C = self._pcolorargs('pcolormesh', *args) + allmatch = (shading == 'gouraud') + + X, Y, C = self._pcolorargs('pcolormesh', *args, allmatch=allmatch) Ny, Nx = X.shape # convert to one dimensional arrays - if shading != 'gouraud': - C = ma.ravel(C[0:Ny - 1, 0:Nx - 1]) # data point in each cell is - # value at lower left corner - else: - C = C.ravel() + C = C.ravel() X = X.ravel() Y = Y.ravel() diff --git a/lib/matplotlib/tests/baseline_images/test_transforms/pre_transform_data.pdf b/lib/matplotlib/tests/baseline_images/test_transforms/pre_transform_data.pdf index 192890d2cd07c624e1644d43cec66c61ba1016be..9526a55043a5e8e96f86898327acdef314007721 100644 GIT binary patch delta 38240 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 W>3{!t^Q*VOl(%1f^~>LU^Y;I^_L*=1 delta 38326 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 diff --git a/lib/matplotlib/tests/baseline_images/test_transforms/pre_transform_data.png b/lib/matplotlib/tests/baseline_images/test_transforms/pre_transform_data.png index d6ad8e0114e140684441acd0f8f21fe8ceca230a..eff0430fe58ac5ea5e51dabe4213d8deef547a0b 100644 GIT binary patch literal 80945 zcmeGEhdY*k{6CCeB&En`Ns5Gw2+699k|Km;lTgXb$X=yk?-@lTNs^tAWUCaB>^;lg z`}a8CpZojy{f^^z+<(A*9Jk}>UA^PF&g*b>cwtp9WFL{3T`!ZR@pamoD`$iRQy=|+%82Y?Md;uwD+aL zB%d1o!y58Xh5QJ+G&y%%=kV$l$1aQf+u@z;9i@Mt?zF9syHhm3TP9A{|9MT}|M!LdAAOHH^gGFf_UzmD`2BkUO-FCyvwY)Hd%4|j4|m^~ zm5G+3bYm#~iGqTn=jV&_?j(fLCI73OFIO~ z#LeAZHP7r?>Y)=?o}W=ZdpPCrC&vQ^yGsKCC$CpkEuQG_bB&(1VUQr+{r{#6x08{P zy_+CUq3bUCKR-phug!GH*Cll}ws#X0CAJIywAIr!Xl~cX_YUx&l9TLx`cG9)@A&^K zZ^>;$>2p167`1nr8=-&T?M=_XkhHeEG;ORHBS03(bItbNeqXhK|29TwxbODEQXUo| zdhF}7_0LZG1P6=$84eWf`n)jS9_yy^xca}1#1-kgJt-;a8ze7LTPPby0l&6P-o8@>Su-u2{6SbaoypU7OjtvM~Nv zg~dnh;O-C;tL{&MCvVrYN=Pux|82QA+L#j9#?HxU)coe!(r|)j$XQp1T+;^fdw+kQ zI&gxWoq|{6?dSE?Mb%e|2ka-i4s~^P-En6kn$S7tnSnCgm+ASI>&8RhV!4Ct25RV; z#ceAl)@_ID18EM5^dtvMDokhjHtvY-UH^gm6MEvhWbyJ)+(=W}Zd{aqe|7M|JpbU} zi{6wpKhrf&=oLHBpLU#hn2^9y6?pJ=(?U;~_iL>zwxREFPjm~cdRHe)FIM{PwHa?a zbu6B!pu(`YxPx-Rhb z3=1tSt^L10^v&s-7xna*DQTD}A{A~nO*~=o_}p9mB7P zoF8i@D^^hdc<=9Hp__F*BMr$@b91sY;tcyw7}$>rxlB(_|M_5Z^qpSegD{TENygPd zHIcm0Usuk{%0@K!Zr{Zs84!E&wo!Y&rNc40$>P~v4*&k#H>&h2D=*)YbL)Gy`6fOx zD>m8G;v#XuQ*)zN;}*;tlD2BR(@RsdJ*Hr;DE*I)nK@t^?cu~L36hk9C<+;Ds;R|p zPu`m=tEc|9WLp3H-Q9gX&G8yJ12Z$VR4L_l8kz@BE()@9KE6@m6Z)sbb(>l9o53(i z+>M*+R8&-21y+Y{)yMnV4cDh|$%S(&y|-u;vgrPFNNRmOuT#kHN()8B8bu9MccNtwv$#s4G?}-h8XBtg-jHml{+T~Mot9;S zl&42HuNF224NCAlensjgHR?ni*M4u>z-B+**34afRKYL&=Q!P=Lo}p1zH9Q%&dxH) z4bsUCT$bPSE;D^?eemGH-MNt)?3^C7iC;WZDieQwFHgR>NYBVP66W#WyKZi*o}k>t z?9*52Z`|}+bzeA2mUeEWVaxE3go~vf>j7iw*U}%OfQ@GcYLzcb?%2!o@cffqg3GMY zy?g0Se<&(-Da_T$P<{4EvAe3Xv-6e1E9yfMd$25mTsyaKm&R9}#Pf>HPtM%oZ-<(H z)UOO)L^Xu^Y~OYGj1N%_s9KG7yc^3FO6t#_?{86kd5NC%8TAw4lBYxSO!*1AhgLv; zZ|@7Y!q|w+%oAhH=})eEt~bA%eXW+VBj2L+0WSVvGY30+Pi^=yrnQ^=SFe!!r<5F>gekpz8F<(t_%MZmUC|ZxZ77jHF*1(@@+xo!MaF6`wJOHamy?yHFfuX`iPovsqucx3sdtl>4it=v;lg zxS&~+DC1cdVXsT1K(hD;I%oHjk?E`ETWCkm`JbI1N4?TPJ%c64`TZgkH)$H|X2{gjl{j9$bR z!Oqwh9(-IoJMs39=O3J=*%l@`{a-1?oy*WTFMGG=Gg+=hD+5-tJYL-HI48^V=g%31 zOtxEf75k#Mm;d-d%M-an;@PfaSDp)-#)X80m<^i+p#qejNes>nls6sXjF6||#ujIr z9sUu0*H(dX�k+uoSJ8+&{EJb4ts+xgQo_N* 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 Lj47}M>wz7tH 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 U?o!vH-=Hw@boFyt=akR{0D @@ -49,7 +49,7 @@ L92.5748 -82.7503 L92.5748 -59.2357" id="C0_0_d6879774b7"/> - + @@ -77,7 +77,7 @@ L333.997 -59.2357 L333.997 -59.2357" id="C1_0_d5dad72e48"/> - + @@ -106,7 +106,7 @@ L253.523 -90.5885 L293.76 -86.6694" id="C2_0_f77b20b182"/> - + @@ -135,7 +135,7 @@ L173.049 -121.941 L213.286 -118.022" id="C3_0_05e8bb0faf"/> - + @@ -162,7 +162,7 @@ L92.5748 -153.294 L132.812 -149.375" id="C4_0_8fef5974c0"/> - + @@ -191,7 +191,7 @@ L333.997 -153.294 L374.234 -149.375" id="C5_0_06dd094376"/> - + @@ -219,7 +219,7 @@ L253.523 -184.647 L293.76 -180.728" id="C6_0_505e2f4f40"/> - + @@ -239,7 +239,7 @@ L173.049 -216 L213.286 -212.081" id="C7_0_06d336a9bf"/> - + @@ -534,148 +534,148 @@ L226.698 -310.059 L226.698 -300.261" id="C8_2f_d396b34810"/> - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -694,154 +694,154 @@ z " id="C9_0_919e3f95db"/> - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -2942,151 +2942,151 @@ z " id="Cb_30_91dfad6065"/> - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -5517,1780 +5517,1780 @@ M453.297 -178.597 L453.297 -178.597" id="Cc_24f_abb5b36b8e"/> - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -7299,20 +7299,20 @@ L453.297 -178.597" id="Cc_24f_abb5b36b8e"/> +L0 -4" id="m93b0483c22" style="stroke:#000000;stroke-width:0.5;"/> - + +L0 4" id="m741efc42ff" style="stroke:#000000;stroke-width:0.5;"/> - + @@ -7338,7 +7338,7 @@ Q6.59375 17.9688 6.59375 36.375 Q6.59375 54.8281 13.0625 64.5156 Q19.5312 74.2188 31.7812 74.2188" id="BitstreamVeraSans-Roman-30"/> - + @@ -7346,12 +7346,12 @@ Q19.5312 74.2188 31.7812 74.2188" id="BitstreamVeraSans-Roman-30"/> - + - + @@ -7381,7 +7381,7 @@ Q49.8594 40.875 45.4062 35.4062 Q44.1875 33.9844 37.6406 27.2188 Q31.1094 20.4531 19.1875 8.29688" id="BitstreamVeraSans-Roman-32"/> - + @@ -7390,12 +7390,12 @@ Q31.1094 20.4531 19.1875 8.29688" id="BitstreamVeraSans-Roman-32"/> - + - + @@ -7421,7 +7421,7 @@ L4.89062 26.7031 z " id="BitstreamVeraSans-Roman-34"/> - + @@ -7430,12 +7430,12 @@ z - + - + @@ -7470,7 +7470,7 @@ Q23.3906 74.2188 37.2031 74.2188 Q40.9219 74.2188 44.7031 73.4844 Q48.4844 72.75 52.5938 71.2969" id="BitstreamVeraSans-Roman-36"/> - + @@ -7479,12 +7479,12 @@ Q48.4844 72.75 52.5938 71.2969" id="BitstreamVeraSans-Roman-36"/> - + - + @@ -7527,7 +7527,7 @@ Q38.1406 66.4062 31.7812 66.4062 Q25.3906 66.4062 21.8438 63.2344 Q18.3125 60.0625 18.3125 54.3906" id="BitstreamVeraSans-Roman-38"/> - + @@ -7536,12 +7536,12 @@ Q18.3125 60.0625 18.3125 54.3906" id="BitstreamVeraSans-Roman-38"/> - + - + @@ -7562,7 +7562,7 @@ L12.4062 0 z " id="BitstreamVeraSans-Roman-31"/> - + @@ -7576,25 +7576,25 @@ z +L4 0" id="m728421d6d4" style="stroke:#000000;stroke-width:0.5;"/> - + +L-4 0" id="mcb0005524f" style="stroke:#000000;stroke-width:0.5;"/> - + - + @@ -7602,17 +7602,17 @@ L-4 0" id="m0d5b0a6425" style="stroke:#000000;stroke-linecap:butt;stroke-width:0 - + - + - + @@ -7621,17 +7621,17 @@ L-4 0" id="m0d5b0a6425" style="stroke:#000000;stroke-linecap:butt;stroke-width:0 - + - + - + @@ -7640,17 +7640,17 @@ L-4 0" id="m0d5b0a6425" style="stroke:#000000;stroke-linecap:butt;stroke-width:0 - + - + - + @@ -7659,17 +7659,17 @@ L-4 0" id="m0d5b0a6425" style="stroke:#000000;stroke-linecap:butt;stroke-width:0 - + - + - + @@ -7678,17 +7678,17 @@ L-4 0" id="m0d5b0a6425" style="stroke:#000000;stroke-linecap:butt;stroke-width:0 - + - + - + diff --git a/lib/matplotlib/tests/test_axes.py b/lib/matplotlib/tests/test_axes.py index 1e77570d366e..a812e3b14418 100644 --- a/lib/matplotlib/tests/test_axes.py +++ b/lib/matplotlib/tests/test_axes.py @@ -1,4 +1,6 @@ from nose.tools import assert_equal +from nose.tools import assert_raises + import numpy as np from numpy import ma @@ -293,7 +295,6 @@ def test_shaped_data(): plt.plot( y2 ) plt.subplot( 413 ) - from nose.tools import assert_raises assert_raises(ValueError,plt.plot, (y1,y2)) plt.subplot( 414 ) @@ -662,6 +663,20 @@ def test_pcolormesh(): ax = fig.add_subplot(133) ax.pcolormesh(Qx,Qz,Z, shading="gouraud") +def test_pcolorargs(): + n = 12 + x = np.linspace(-1.5, 1.5, n) + y = np.linspace(-1.5, 1.5, n*2) + X, Y = np.meshgrid(x, y) + Z = np.sqrt(X**2 + Y**2)/5 + + _, ax = plt.subplots() + assert_raises(TypeError, ax.pcolormesh, y, x, Z) + assert_raises(TypeError, ax.pcolormesh, X, Y, Z.T) + assert_raises(TypeError, ax.pcolormesh, x, y, Z[:-1, :-1], + shading="gouraud") + assert_raises(TypeError, ax.pcolormesh, X, Y, Z[:-1, :-1], + shading="gouraud") @image_comparison(baseline_images=['canonical']) def test_canonical(): diff --git a/lib/matplotlib/tests/test_transforms.py b/lib/matplotlib/tests/test_transforms.py index 1790c04ee9f8..54586d608c1a 100644 --- a/lib/matplotlib/tests/test_transforms.py +++ b/lib/matplotlib/tests/test_transforms.py @@ -2,7 +2,7 @@ import unittest from nose.tools import assert_equal, assert_raises -import numpy.testing as np_test +import numpy.testing as np_test from numpy.testing import assert_almost_equal from matplotlib.transforms import Affine2D, BlendedGenericTransform from matplotlib.path import Path @@ -61,7 +61,7 @@ def test_external_transform_api(): class ScaledBy(object): def __init__(self, scale_factor): self._scale_factor = scale_factor - + def _as_mpl_transform(self, axes): return mtrans.Affine2D().scale(self._scale_factor) + axes.transData @@ -70,28 +70,28 @@ def _as_mpl_transform(self, axes): ax.set_xlim(0, 100) ax.set_ylim(0, 100) # assert that the top transform of the line is the scale transform. - np.testing.assert_allclose(line.get_transform()._a.get_matrix(), + np.testing.assert_allclose(line.get_transform()._a.get_matrix(), mtrans.Affine2D().scale(10).get_matrix()) - + @image_comparison(baseline_images=['pre_transform_data']) def test_pre_transform_plotting(): # a catch-all for as many as possible plot layouts which handle pre-transforming the data - # NOTE: The axis range is important in this plot. It should be x10 what the data suggests it should be + # NOTE: The axis range is important in this plot. It should be x10 what the data suggests it should be ax = plt.axes() times10 = mtrans.Affine2D().scale(10) - + ax.contourf(np.arange(48).reshape(6, 8), transform=times10 + ax.transData) - - ax.pcolormesh(np.linspace(0, 4, 7), - np.linspace(5.5, 8, 9), - np.arange(48).reshape(6, 8), + + ax.pcolormesh(np.linspace(0, 4, 7), + np.linspace(5.5, 8, 9), + np.arange(48).reshape(8, 6), transform=times10 + ax.transData) - - ax.scatter(np.linspace(0, 10), np.linspace(10, 0), + + ax.scatter(np.linspace(0, 10), np.linspace(10, 0), transform=times10 + ax.transData) - - + + x = np.linspace(8, 10, 20) y = np.linspace(1, 5, 20) u = 2*np.sin(x) + np.cos(y[:, np.newaxis]) @@ -99,13 +99,13 @@ def test_pre_transform_plotting(): ax.streamplot(x, y, u, v, transform=times10 + ax.transData, density=(1, 1), linewidth=u**2 + v**2) - + # reduce the vector data down a bit for barb and quiver plotting x, y = x[::3], y[::3] u, v = u[::3, ::3], v[::3, ::3] - + ax.quiver(x, y + 5, u, v, transform=times10 + ax.transData) - + ax.barbs(x - 3, y + 5, u**2, v**2, transform=times10 + ax.transData) @@ -114,7 +114,7 @@ def test_contour_pre_transform_limits(): ax = plt.axes() xs, ys = np.meshgrid(np.linspace(15, 20, 15), np.linspace(12.4, 12.5, 20)) ax.contourf(xs, ys, np.log(xs * ys), transform=mtrans.Affine2D().scale(0.1) + ax.transData) - + expected = np.array([[ 1.5 , 1.24], [ 2. , 1.25]]) assert_almost_equal(expected, ax.dataLim.get_points()) @@ -126,7 +126,7 @@ def test_pcolor_pre_transform_limits(): ax = plt.axes() xs, ys = np.meshgrid(np.linspace(15, 20, 15), np.linspace(12.4, 12.5, 20)) ax.pcolor(xs, ys, np.log(xs * ys), transform=mtrans.Affine2D().scale(0.1) + ax.transData) - + expected = np.array([[ 1.5 , 1.24], [ 2. , 1.25]]) assert_almost_equal(expected, ax.dataLim.get_points()) @@ -138,11 +138,11 @@ def test_pcolormesh_pre_transform_limits(): ax = plt.axes() xs, ys = np.meshgrid(np.linspace(15, 20, 15), np.linspace(12.4, 12.5, 20)) ax.pcolormesh(xs, ys, np.log(xs * ys), transform=mtrans.Affine2D().scale(0.1) + ax.transData) - + expected = np.array([[ 1.5 , 1.24], [ 2. , 1.25]]) assert_almost_equal(expected, ax.dataLim.get_points()) - + def test_Affine2D_from_values(): points = np.array([ [0,0], @@ -248,7 +248,7 @@ def setUp(self): # self.stack1.write_graphviz(file('stack1.dot', 'w')) # self.stack2.write_graphviz(file('stack2.dot', 'w')) # self.stack2_subset.write_graphviz(file('stack2_subset.dot', 'w')) - + def test_transform_depth(self): assert_equal(self.stack1.depth, 4) assert_equal(self.stack2.depth, 4) @@ -274,7 +274,7 @@ def test_transform_shortcuts(self): self.assertEqual(self.stack1 - self.stack2_subset, self.ta1) self.assertEqual(self.stack2 - self.stack2_subset, self.ta1) - assert_equal((self.stack2_subset - self.stack2), + assert_equal((self.stack2_subset - self.stack2), self.ta1.inverted(), ) assert_equal((self.stack2_subset - self.stack2).depth, 1) @@ -289,7 +289,7 @@ def test_transform_shortcuts(self): self.assertEqual(self.stack1 - self.ta3, self.ta1 + (self.tn1 + self.ta2)) self.assertEqual(self.stack2 - self.ta3, self.ta1 + self.tn1 + self.ta2) - + self.assertEqual((self.ta2 + self.ta3) - self.ta3 + self.ta3, self.ta2 + self.ta3) def test_contains_branch(self): @@ -354,7 +354,7 @@ def test_affine_simplification(self): class TestTransformPlotInterface(unittest.TestCase): def tearDown(self): plt.close() - + def test_line_extent_axes_coords(self): # a simple line in axes coordinates ax = plt.axes() @@ -426,7 +426,7 @@ def test_pathc_extents_affine(self): patch = mpatches.PathPatch(pth, transform=offset + ax.transData) ax.add_patch(patch) expeted_data_lim = np.array([[0., 0.], [10., 10.]]) + 10 - np.testing.assert_array_almost_equal(ax.dataLim.get_points(), + np.testing.assert_array_almost_equal(ax.dataLim.get_points(), expeted_data_lim) @@ -440,7 +440,7 @@ def test_line_extents_for_non_affine_transData(self): # before a transData transformation, hence the data limits # are not what is being shown on the actual plot. expeted_data_lim = np.array([[0., 0.], [9., 9.]]) + [0, 10] - np.testing.assert_array_almost_equal(ax.dataLim.get_points(), + np.testing.assert_array_almost_equal(ax.dataLim.get_points(), expeted_data_lim) From ca293ce61ab3c862adad638a0b56c4837e38a3b9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Peter=20W=C3=BCrtz?= Date: Mon, 27 May 2013 05:54:00 -0700 Subject: [PATCH 04/11] Merge pull request #1975 from pwuertz/pgf_mixedrenderer MixedModeRenderer non-72-dpi fixes & Pgf mixed rendering --- lib/matplotlib/backends/backend_mixed.py | 12 +++++--- lib/matplotlib/backends/backend_pgf.py | 27 +++++++++++------- .../test_backend_pgf/pgf_mixedmode.pdf | Bin 0 -> 24408 bytes lib/matplotlib/tests/test_backend_pgf.py | 12 ++++++++ 4 files changed, 36 insertions(+), 15 deletions(-) create mode 100644 lib/matplotlib/tests/baseline_images/test_backend_pgf/pgf_mixedmode.pdf diff --git a/lib/matplotlib/backends/backend_mixed.py b/lib/matplotlib/backends/backend_mixed.py index 4b1a8b95b08a..511304855514 100644 --- a/lib/matplotlib/backends/backend_mixed.py +++ b/lib/matplotlib/backends/backend_mixed.py @@ -48,6 +48,7 @@ def __init__(self, figure, width, height, dpi, vector_renderer, # the figure dpi before and after the rasterization. Although # this looks ugly, I couldn't find a better solution. -JJL self.figure=figure + self._figdpi = figure.get_dpi() self._bbox_inches_restore = bbox_inches_restore @@ -121,16 +122,19 @@ def stop_rasterizing(self): image.is_grayscale = False image.flipud_out() gc = self._renderer.new_gc() + # TODO: If the mixedmode resolution differs from the figure's + # dpi, the image must be scaled (dpi->_figdpi). Not all + # backends support this. self._renderer.draw_image( gc, - float(l)/self.dpi*72., - (float(height) - b - h)/self.dpi*72., + float(l) / self.dpi * self._figdpi, + (float(height)-b-h) / self.dpi * self._figdpi, image) self._raster_renderer = None self._rasterizing = False - # restore the figure dpi. - self.figure.set_dpi(72) + # restore the figure dpi. + self.figure.set_dpi(self._figdpi) if self._bbox_inches_restore: # when tight bbox is used r = process_figure_for_rasterizing(self.figure, diff --git a/lib/matplotlib/backends/backend_pgf.py b/lib/matplotlib/backends/backend_pgf.py index c9015d3a5237..63c48082a85f 100644 --- a/lib/matplotlib/backends/backend_pgf.py +++ b/lib/matplotlib/backends/backend_pgf.py @@ -13,6 +13,7 @@ import matplotlib as mpl from matplotlib.backend_bases import RendererBase, GraphicsContextBase,\ FigureManagerBase, FigureCanvasBase +from matplotlib.backends.backend_mixed import MixedModeRenderer from matplotlib.figure import Figure from matplotlib.text import Text from matplotlib.path import Path @@ -738,7 +739,7 @@ def __init__(self, *args): def get_default_filetype(self): return 'pdf' - def _print_pgf_to_fh(self, fh): + def _print_pgf_to_fh(self, fh, *args, **kwargs): header_text = r"""%% Creator: Matplotlib, PGF backend %% %% To include the figure in your LaTeX document, write @@ -767,6 +768,7 @@ def _print_pgf_to_fh(self, fh): # get figure size in inch w, h = self.figure.get_figwidth(), self.figure.get_figheight() + dpi = self.figure.get_dpi() # create pgfpicture environment and write the pgf code fh.write(header_text) @@ -777,7 +779,10 @@ def _print_pgf_to_fh(self, fh): writeln(fh, r"\begin{pgfpicture}") writeln(fh, r"\pgfpathrectangle{\pgfpointorigin}{\pgfqpoint{%fin}{%fin}}" % (w, h)) writeln(fh, r"\pgfusepath{use as bounding box}") - renderer = RendererPgf(self.figure, fh) + _bbox_inches_restore = kwargs.pop("bbox_inches_restore", None) + renderer = MixedModeRenderer(self.figure, w, h, dpi, + RendererPgf(self.figure, fh), + bbox_inches_restore=_bbox_inches_restore) self.figure.draw(renderer) # end the pgfpicture environment @@ -796,14 +801,14 @@ def print_pgf(self, fname_or_fh, *args, **kwargs): # figure out where the pgf is to be written to if is_string_like(fname_or_fh): with codecs.open(fname_or_fh, "w", encoding="utf-8") as fh: - self._print_pgf_to_fh(fh) + self._print_pgf_to_fh(fh, *args, **kwargs) elif is_writable_file_like(fname_or_fh): raise ValueError("saving pgf to a stream is not supported, " + "consider using the pdf option of the pgf-backend") else: raise ValueError("filename must be a path") - def _print_pdf_to_fh(self, fh): + def _print_pdf_to_fh(self, fh, *args, **kwargs): w, h = self.figure.get_figwidth(), self.figure.get_figheight() try: @@ -814,7 +819,7 @@ def _print_pdf_to_fh(self, fh): fname_pdf = os.path.join(tmpdir, "figure.pdf") # print figure to pgf and compile it with latex - self.print_pgf(fname_pgf) + self.print_pgf(fname_pgf, *args, **kwargs) latex_preamble = get_preamble() latex_fontspec = get_fontspec() @@ -856,13 +861,13 @@ def print_pdf(self, fname_or_fh, *args, **kwargs): # figure out where the pdf is to be written to if is_string_like(fname_or_fh): with open(fname_or_fh, "wb") as fh: - self._print_pdf_to_fh(fh) + self._print_pdf_to_fh(fh, *args, **kwargs) elif is_writable_file_like(fname_or_fh): - self._print_pdf_to_fh(fname_or_fh) + self._print_pdf_to_fh(fname_or_fh, *args, **kwargs) else: raise ValueError("filename must be a path or a file-like object") - def _print_png_to_fh(self, fh): + def _print_png_to_fh(self, fh, *args, **kwargs): converter = make_pdf_to_png_converter() try: @@ -871,7 +876,7 @@ def _print_png_to_fh(self, fh): fname_pdf = os.path.join(tmpdir, "figure.pdf") fname_png = os.path.join(tmpdir, "figure.png") # create pdf and try to convert it to png - self.print_pdf(fname_pdf) + self.print_pdf(fname_pdf, *args, **kwargs) converter(fname_pdf, fname_png, dpi=self.figure.dpi) # copy file contents to target with open(fname_png, "rb") as fh_src: @@ -888,9 +893,9 @@ def print_png(self, fname_or_fh, *args, **kwargs): """ if is_string_like(fname_or_fh): with open(fname_or_fh, "wb") as fh: - self._print_png_to_fh(fh) + self._print_png_to_fh(fh, *args, **kwargs) elif is_writable_file_like(fname_or_fh): - self._print_png_to_fh(fname_or_fh) + self._print_png_to_fh(fname_or_fh, *args, **kwargs) else: raise ValueError("filename must be a path or a file-like object") diff --git a/lib/matplotlib/tests/baseline_images/test_backend_pgf/pgf_mixedmode.pdf b/lib/matplotlib/tests/baseline_images/test_backend_pgf/pgf_mixedmode.pdf new file mode 100644 index 0000000000000000000000000000000000000000..86dfbbc527cf5cfbc7a7aea95a97586e7c77e94a GIT binary patch literal 24408 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 literal 0 HcmV?d00001 diff --git a/lib/matplotlib/tests/test_backend_pgf.py b/lib/matplotlib/tests/test_backend_pgf.py index 8f922e7727f0..34c31ce9a604 100644 --- a/lib/matplotlib/tests/test_backend_pgf.py +++ b/lib/matplotlib/tests/test_backend_pgf.py @@ -145,6 +145,18 @@ def test_pathclip(): plt.savefig(os.path.join(result_dir, "pgf_pathclip.pdf")) +# test mixed mode rendering +@switch_backend('pgf') +def test_mixedmode(): + if not check_for('xelatex'): + raise SkipTest('xelatex + pgf is required') + + Y, X = np.ogrid[-1:1:40j, -1:1:40j] + plt.figure() + plt.pcolor(X**2 + Y**2).set_rasterized(True) + compare_figure('pgf_mixedmode.pdf') + + if __name__ == '__main__': import nose nose.runmodule(argv=['-s','--with-doctest'], exit=False) From 130b6fcc034c46fcef2f0f0d55640878b28ee29f Mon Sep 17 00:00:00 2001 From: Michael Droettboom Date: Tue, 28 May 2013 08:17:37 -0700 Subject: [PATCH 05/11] Merge pull request #1813 from mdboom/gtk3-version-check GTK segfault with GTK3 and mpl_toolkits --- lib/matplotlib/backends/backend_gtk3.py | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/lib/matplotlib/backends/backend_gtk3.py b/lib/matplotlib/backends/backend_gtk3.py index 43c041738209..88eee7ff5616 100644 --- a/lib/matplotlib/backends/backend_gtk3.py +++ b/lib/matplotlib/backends/backend_gtk3.py @@ -3,10 +3,22 @@ import os, sys def fn_name(): return sys._getframe(1).f_code.co_name +try: + import gi +except ImportError: + raise ImportError("Gtk3 backend requires pygobject to be installed.") + +try: + gi.require_version("Gtk", "3.0") +except ValueError: + raise ImportError( + "Gtk3 backend requires the GObject introspection bindings for Gtk 3 " + "to be installed.") + try: from gi.repository import Gtk, Gdk, GObject except ImportError: - raise ImportError("GTK3 backend requires pygobject to be installed.") + raise ImportError("Gtk3 backend requires pygobject to be installed.") import matplotlib from matplotlib._pylab_helpers import Gcf From 8631c498468e843357838105768c4ddd5458fb63 Mon Sep 17 00:00:00 2001 From: Michael Droettboom Date: Tue, 28 May 2013 07:54:06 -0700 Subject: [PATCH 06/11] Merge pull request #2069 from jakevdp/anim_fix BUG: pass kwargs to TimedAnimation --- lib/matplotlib/animation.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/matplotlib/animation.py b/lib/matplotlib/animation.py index 155d30dfe93d..e2a2e24e2728 100644 --- a/lib/matplotlib/animation.py +++ b/lib/matplotlib/animation.py @@ -245,7 +245,7 @@ def isAvailable(cls): class FileMovieWriter(MovieWriter): '`MovieWriter` subclass that handles writing to a file.' def __init__(self, *args, **kwargs): - MovieWriter.__init__(self, *args) + MovieWriter.__init__(self, *args, **kwargs) self.frame_format = rcParams['animation.frame_format'] def setup(self, fig, outfile, dpi, frame_prefix='_tmp', clear_temp=True): From 5bb185ec23b107ea00fffde57c5e2afc0e248fdc Mon Sep 17 00:00:00 2001 From: Paul Ivanov Date: Wed, 7 Nov 2012 18:41:10 -0800 Subject: [PATCH 07/11] use plt.subplots() in examples as much as possible At the recent LBL Software Carpentry Workshop, it was pointed out that there's an inconsistency within our documentation for how to create new figures with subplots. Indeed, most examples were using the old way, something like: fig = plt.figure() ax = plt.subplot(111) # or plt.add_subplot(111) This patch changes a whole bunch of instances like the above to: fig, ax = plt.subplots() We should strive to have a minimal amount of constants in our code, especially unusual ones like `111`, which only make sense to Matlab refugees. I have left unchanged examples which were using axes keywords passed to subplot() and add_subplot(), since those end up transforming things like: figure() subplot(111, axisbg='w') to plt.subplots(subplot_kw=dict(axisbg='w')) which isn't necessarily better. I also did not touch most of the user_interfaces examples, since those did not involve using plt, but instead explicitly imported Figure, and used the OO approach on Figure instances. Also updated instaces where the old "import pylab as p" convention was used to use our standard "import matplotlib.pyplot as plt" I have also updated some, but not all uses of subplot(121) etc, but I'm a bit exhausted after doing all of these. --- CHANGELOG | 4 ++ examples/animation/animate_decay.py | 3 +- examples/animation/histogram.py | 3 +- .../old_animation/animate_decay_tk_blit.py | 3 +- .../old_animation/animation_blit_gtk.py | 3 +- .../old_animation/animation_blit_gtk2.py | 3 +- .../old_animation/animation_blit_tk.py | 14 +++--- .../old_animation/animation_blit_wx.py | 2 +- .../old_animation/draggable_legend.py | 5 +- .../animation/old_animation/gtk_timeout.py | 3 +- .../old_animation/histogram_tkagg.py | 3 +- .../old_animation/simple_anim_gtk.py | 4 +- .../old_animation/simple_anim_tkagg.py | 3 +- .../animation/old_animation/simple_idle_wx.py | 4 +- .../old_animation/simple_timer_wx.py | 4 +- .../old_animation/strip_chart_demo.py | 3 +- examples/animation/random_data.py | 3 +- examples/animation/simple_anim.py | 3 +- examples/animation/strip_chart_demo.py | 3 +- examples/api/README.txt | 3 +- examples/api/agg_oo.py | 6 +-- examples/api/barchart_demo.py | 3 +- examples/api/collections_demo.py | 50 ++++++++----------- examples/api/compound_path.py | 3 +- examples/api/date_demo.py | 3 +- examples/api/date_index_formatter.py | 6 +-- examples/api/demo_affine_image.py | 5 +- examples/api/donut_demo.py | 3 +- examples/api/engineering_formatter.py | 2 +- examples/api/fahrenheit_celsius_scales.py | 5 +- examples/api/font_family_rc.py | 3 +- examples/api/font_file.py | 3 +- examples/api/histogram_path_demo.py | 3 +- examples/api/image_zcoord.py | 3 +- examples/api/joinstyle.py | 3 +- examples/api/line_with_text.py | 3 +- examples/api/patch_collection.py | 3 +- examples/api/quad_bezier.py | 3 +- examples/api/scatter_piecharts.py | 3 +- examples/api/span_regions.py | 3 +- examples/api/two_scales.py | 3 +- examples/api/unicode_minus.py | 3 +- examples/api/watermark_image.py | 3 +- examples/api/watermark_text.py | 4 +- examples/axes_grid/demo_axes_divider.py | 4 +- examples/axes_grid/demo_axes_hbox_divider.py | 12 ++--- examples/axes_grid/demo_axes_rgb.py | 5 +- .../demo_colorbar_with_inset_locator.py | 14 ++---- examples/axes_grid/inset_locator_demo.py | 10 ++-- examples/axes_grid/inset_locator_demo2.py | 4 +- examples/axes_grid/scatter_hist.py | 6 +-- examples/event_handling/data_browser.py | 4 +- .../event_handling/figure_axes_enter_leave.py | 8 +-- examples/event_handling/idle_and_timeout.py | 3 +- examples/event_handling/keypress_demo.py | 3 +- examples/event_handling/legend_picking.py | 3 +- examples/event_handling/looking_glass.py | 3 +- examples/event_handling/path_editor.py | 3 +- examples/event_handling/pick_event_demo.py | 34 ++++++------- examples/event_handling/pick_event_demo2.py | 3 +- examples/event_handling/poly_editor.py | 3 +- examples/event_handling/pong_gtk.py | 3 +- examples/event_handling/resample.py | 3 +- examples/event_handling/timers.py | 3 +- examples/event_handling/viewlims.py | 5 +- examples/misc/longshort.py | 3 +- examples/misc/multiprocess.py | 4 +- examples/misc/rasterization_demo.py | 5 +- .../pylab_examples/agg_buffer_to_array.py | 3 +- examples/pylab_examples/annotation_demo3.py | 6 +-- examples/pylab_examples/aspect_loglog.py | 3 +- examples/pylab_examples/axes_props.py | 2 +- examples/pylab_examples/barchart_demo.py | 4 +- examples/pylab_examples/barchart_demo2.py | 4 +- examples/pylab_examples/boxplot_demo2.py | 3 +- examples/pylab_examples/boxplot_demo3.py | 3 +- examples/pylab_examples/broken_barh.py | 3 +- .../pylab_examples/centered_ticklabels.py | 3 +- .../colorbar_tick_labelling_demo.py | 6 +-- examples/pylab_examples/coords_demo.py | 2 +- examples/pylab_examples/coords_report.py | 2 +- examples/pylab_examples/cursor_demo.py | 2 +- examples/pylab_examples/custom_ticker1.py | 2 +- examples/pylab_examples/dashpointlabel.py | 4 +- examples/pylab_examples/date_demo1.py | 3 +- examples/pylab_examples/date_demo2.py | 3 +- examples/pylab_examples/date_demo_convert.py | 3 +- examples/pylab_examples/date_demo_rrule.py | 2 +- .../pylab_examples/date_index_formatter.py | 3 +- .../pylab_examples/demo_annotation_box.py | 4 +- examples/pylab_examples/demo_ribbon_box.py | 4 +- examples/pylab_examples/dolphin.py | 3 +- examples/pylab_examples/ellipse_collection.py | 2 +- examples/pylab_examples/fill_between_demo.py | 3 +- examples/pylab_examples/finance_demo.py | 3 +- examples/pylab_examples/findobj_demo.py | 3 +- examples/pylab_examples/hist_colormapped.py | 3 +- examples/pylab_examples/interp_demo.py | 7 ++- examples/pylab_examples/legend_demo.py | 2 +- examples/pylab_examples/major_minor_demo1.py | 2 +- examples/pylab_examples/major_minor_demo2.py | 2 +- examples/pylab_examples/movie_demo.py | 6 +-- .../multiple_yaxis_with_spines.py | 3 +- .../pylab_examples/scatter_custom_symbol.py | 3 +- examples/pylab_examples/scatter_demo2.py | 3 -- examples/pylab_examples/stackplot_demo.py | 6 +-- examples/pylab_examples/stock_demo.py | 2 +- examples/pylab_examples/system_monitor.py | 3 +- examples/pylab_examples/text_handles.py | 2 +- examples/units/annotate_with_units.py | 4 +- examples/units/artist_tests.py | 7 ++- examples/units/bar_unit_demo.py | 3 +- .../user_interfaces/lineprops_dialog_gtk.py | 3 +- examples/user_interfaces/pylab_with_gtk.py | 2 +- examples/user_interfaces/svg_tooltip.py | 3 +- examples/widgets/buttons.py | 2 +- examples/widgets/check_buttons.py | 2 +- examples/widgets/radio_buttons.py | 2 +- examples/widgets/rectangle_selector.py | 2 +- examples/widgets/slider_demo.py | 3 +- lib/matplotlib/pylab.py | 3 +- 121 files changed, 191 insertions(+), 330 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index c873ade5a3ea..8d2c91c224cb 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -90,6 +90,10 @@ 2012-11-09 Make plt.subplot() without arguments act as subplot(111) - PI +2012-11-08 Replaced plt.figure and plt.subplot calls by the newer, more + convenient single call to plt.subplots() in the documentation + examples - PI + 2012-10-05 Add support for saving animations as animated GIFs. - JVDP 2012-08-11 Fix path-closing bug in patches.Polygon, so that regardless diff --git a/examples/animation/animate_decay.py b/examples/animation/animate_decay.py index 90267c605032..a8694615e99b 100644 --- a/examples/animation/animate_decay.py +++ b/examples/animation/animate_decay.py @@ -11,8 +11,7 @@ def data_gen(): yield t, np.sin(2*np.pi*t) * np.exp(-t/10.) data_gen.t = 0 -fig = plt.figure() -ax = fig.add_subplot(111) +fig, ax = plt.subplots() line, = ax.plot([], [], lw=2) ax.set_ylim(-1.1, 1.1) ax.set_xlim(0, 5) diff --git a/examples/animation/histogram.py b/examples/animation/histogram.py index b1aa9249dff7..f81d4f397269 100644 --- a/examples/animation/histogram.py +++ b/examples/animation/histogram.py @@ -9,8 +9,7 @@ import matplotlib.path as path import matplotlib.animation as animation -fig = plt.figure() -ax = fig.add_subplot(111) +fig, ax = plt.subplots() # histogram our data with numpy data = np.random.randn(1000) diff --git a/examples/animation/old_animation/animate_decay_tk_blit.py b/examples/animation/old_animation/animate_decay_tk_blit.py index cae4c4a2b973..36e451f803f6 100644 --- a/examples/animation/old_animation/animate_decay_tk_blit.py +++ b/examples/animation/old_animation/animate_decay_tk_blit.py @@ -10,8 +10,7 @@ def data_gen(): return np.sin(2*np.pi*t) * np.exp(-t/10.) data_gen.t = 0 -fig = plt.figure() -ax = fig.add_subplot(111) +fig, ax = plt.subplots() line, = ax.plot([], [], animated=True, lw=2) ax.set_ylim(-1.1, 1.1) ax.set_xlim(0, 5) diff --git a/examples/animation/old_animation/animation_blit_gtk.py b/examples/animation/old_animation/animation_blit_gtk.py index a13fed6d3ff8..9200daf778f7 100755 --- a/examples/animation/old_animation/animation_blit_gtk.py +++ b/examples/animation/old_animation/animation_blit_gtk.py @@ -16,8 +16,7 @@ import matplotlib.pyplot as plt -fig = plt.figure() -ax = fig.add_subplot(111) +fig, ax = plt.subplots() canvas = fig.canvas fig.subplots_adjust(left=0.3, bottom=0.3) # check for flipy bugs diff --git a/examples/animation/old_animation/animation_blit_gtk2.py b/examples/animation/old_animation/animation_blit_gtk2.py index b15b1ab177a6..58673fd95c2d 100755 --- a/examples/animation/old_animation/animation_blit_gtk2.py +++ b/examples/animation/old_animation/animation_blit_gtk2.py @@ -148,9 +148,8 @@ def update_line(self, *args): plt.rcParams["text.usetex"] = False -fig = plt.figure() -ax = fig.add_subplot(111) +fig, ax = plt.subplots() ax.xaxis.set_animated(True) ax.yaxis.set_animated(True) canvas = fig.canvas diff --git a/examples/animation/old_animation/animation_blit_tk.py b/examples/animation/old_animation/animation_blit_tk.py index 54e288efd621..0a83e1c75198 100644 --- a/examples/animation/old_animation/animation_blit_tk.py +++ b/examples/animation/old_animation/animation_blit_tk.py @@ -7,17 +7,17 @@ matplotlib.use('TkAgg') import sys -import pylab as p +import matplotlib.pyplot as plt import numpy as npy import time -ax = p.subplot(111) +fig, ax = plt.subplots() canvas = ax.figure.canvas # create the initial line x = npy.arange(0,2*npy.pi,0.01) -line, = p.plot(x, npy.sin(x), animated=True, lw=2) +line, = plt.plot(x, npy.sin(x), animated=True, lw=2) def run(*args): background = canvas.copy_from_bbox(ax.bbox) @@ -43,12 +43,12 @@ def run(*args): run.cnt = 0 -p.subplots_adjust(left=0.3, bottom=0.3) # check for flipy bugs -p.grid() # to ensure proper background restore -manager = p.get_current_fig_manager() +plt.subplots_adjust(left=0.3, bottom=0.3) # check for flipy bugs +plt.grid() # to ensure proper background restore +manager = plt.get_current_fig_manager() manager.window.after(100, run) -p.show() +plt.show() diff --git a/examples/animation/old_animation/animation_blit_wx.py b/examples/animation/old_animation/animation_blit_wx.py index f2ad18be03d7..6071581b31b3 100644 --- a/examples/animation/old_animation/animation_blit_wx.py +++ b/examples/animation/old_animation/animation_blit_wx.py @@ -24,7 +24,7 @@ matplotlib.backends.backend_wxagg._use_accelerator(False) -ax = p.subplot(111) +fig, ax = plt.subplots() canvas = ax.figure.canvas diff --git a/examples/animation/old_animation/draggable_legend.py b/examples/animation/old_animation/draggable_legend.py index 93895a78d046..2a6d8041b6b8 100644 --- a/examples/animation/old_animation/draggable_legend.py +++ b/examples/animation/old_animation/draggable_legend.py @@ -1,13 +1,12 @@ import matplotlib.pyplot as plt - -ax = plt.subplot(111) +fig, ax = plt.subplots() ax.plot([1,2,3], label="test") l = ax.legend() d1 = l.draggable() -xy = 1, 2 +xy = 1, 2 txt = ax.annotate("Test", xy, xytext=(-30, 30), textcoords="offset points", bbox=dict(boxstyle="round",fc=(0.2, 1, 1)), diff --git a/examples/animation/old_animation/gtk_timeout.py b/examples/animation/old_animation/gtk_timeout.py index b35e2b659dd1..d76f609cdb9e 100644 --- a/examples/animation/old_animation/gtk_timeout.py +++ b/examples/animation/old_animation/gtk_timeout.py @@ -5,8 +5,7 @@ import matplotlib.pyplot as plt -fig = plt.figure() -ax = fig.add_subplot(111) +fig, ax = plt.subplots() line, = ax.plot(np.random.rand(10)) ax.set_ylim(0, 1) diff --git a/examples/animation/old_animation/histogram_tkagg.py b/examples/animation/old_animation/histogram_tkagg.py index 5536e4477d32..8236ac0b5e83 100644 --- a/examples/animation/old_animation/histogram_tkagg.py +++ b/examples/animation/old_animation/histogram_tkagg.py @@ -11,8 +11,7 @@ import matplotlib.patches as patches import matplotlib.path as path -fig = plt.figure() -ax = fig.add_subplot(111) +fig, ax = plt.subplots() # histogram our data with numpy data = np.random.randn(1000) diff --git a/examples/animation/old_animation/simple_anim_gtk.py b/examples/animation/old_animation/simple_anim_gtk.py index 6a851edd18db..ecdec7333640 100644 --- a/examples/animation/old_animation/simple_anim_gtk.py +++ b/examples/animation/old_animation/simple_anim_gtk.py @@ -9,9 +9,7 @@ import matplotlib.pyplot as plt -fig = plt.figure() - -ax = fig.add_subplot(111) +fig, ax = plt.subplots() def animate(): tstart = time.time() # for profiling diff --git a/examples/animation/old_animation/simple_anim_tkagg.py b/examples/animation/old_animation/simple_anim_tkagg.py index 427323ff14b2..e8a3a5ca314e 100755 --- a/examples/animation/old_animation/simple_anim_tkagg.py +++ b/examples/animation/old_animation/simple_anim_tkagg.py @@ -10,8 +10,7 @@ matplotlib.use('TkAgg') # do this before importing pylab import matplotlib.pyplot as plt -fig = plt.figure() -ax = fig.add_subplot(111) +fig, ax = plt.subplots() def animate(): tstart = time.time() # for profiling diff --git a/examples/animation/old_animation/simple_idle_wx.py b/examples/animation/old_animation/simple_idle_wx.py index bcc77df9137b..0612ee6fd3a0 100644 --- a/examples/animation/old_animation/simple_idle_wx.py +++ b/examples/animation/old_animation/simple_idle_wx.py @@ -9,9 +9,7 @@ import matplotlib.pyplot as plt -fig = plt.figure() - -ax = fig.add_subplot(111) +fig, ax = plt.subplots() t = np.arange(0, 2*np.pi, 0.1) line, = ax.plot(t, np.sin(t)) dt = 0.05 diff --git a/examples/animation/old_animation/simple_timer_wx.py b/examples/animation/old_animation/simple_timer_wx.py index 6e7b1607c591..a5b6f96acb98 100644 --- a/examples/animation/old_animation/simple_timer_wx.py +++ b/examples/animation/old_animation/simple_timer_wx.py @@ -9,9 +9,7 @@ import matplotlib.pyplot as plt -fig = plt.figure() - -ax = fig.add_subplot(111) +fig, ax = plt.subplots() t = np.arange(0, 2*np.pi, 0.1) line, = ax.plot(t, np.sin(t)) dt = 0.05 diff --git a/examples/animation/old_animation/strip_chart_demo.py b/examples/animation/old_animation/strip_chart_demo.py index ac7587a261d3..2362c8cb4f65 100644 --- a/examples/animation/old_animation/strip_chart_demo.py +++ b/examples/animation/old_animation/strip_chart_demo.py @@ -64,8 +64,7 @@ def update(self, *args): from pylab import figure, show -fig = figure() -ax = fig.add_subplot(111) +fig, ax = plt.subplots() scope = Scope(ax) gobject.idle_add(scope.update) diff --git a/examples/animation/random_data.py b/examples/animation/random_data.py index 1a31e963a246..c3044a3dee61 100644 --- a/examples/animation/random_data.py +++ b/examples/animation/random_data.py @@ -2,8 +2,7 @@ import matplotlib.pyplot as plt import matplotlib.animation as animation -fig = plt.figure() -ax = fig.add_subplot(111) +fig, ax = plt.subplots() line, = ax.plot(np.random.rand(10)) ax.set_ylim(0, 1) diff --git a/examples/animation/simple_anim.py b/examples/animation/simple_anim.py index 78c9cdfc3ae2..d19196337522 100644 --- a/examples/animation/simple_anim.py +++ b/examples/animation/simple_anim.py @@ -5,8 +5,7 @@ import matplotlib.pyplot as plt import matplotlib.animation as animation -fig = plt.figure() -ax = fig.add_subplot(111) +fig, ax = plt.subplots() x = np.arange(0, 2*np.pi, 0.01) # x-array line, = ax.plot(x, np.sin(x)) diff --git a/examples/animation/strip_chart_demo.py b/examples/animation/strip_chart_demo.py index 119fac9f6719..33ff9d430d0e 100644 --- a/examples/animation/strip_chart_demo.py +++ b/examples/animation/strip_chart_demo.py @@ -44,8 +44,7 @@ def emitter(p=0.03): else: yield np.random.rand(1) -fig = plt.figure() -ax = fig.add_subplot(111) +fig, ax = plt.subplots() scope = Scope(ax) # pass a generator in "emitter" to produce data for the update func diff --git a/examples/api/README.txt b/examples/api/README.txt index dec5d9da970d..a0b901f9d20c 100644 --- a/examples/api/README.txt +++ b/examples/api/README.txt @@ -29,8 +29,7 @@ A simple example of the recommended style is:: import numpy as np import matplotlib.pyplot as plt - fig = plt.figure() - ax = fig.add_subplot(111) # or add_axes + fig, ax = plt.subplots() ax.plot(np.random.rand(10)) ax.set_xlabel('some x data') ax.set_ylabel('some y data') diff --git a/examples/api/agg_oo.py b/examples/api/agg_oo.py index 94acbc119a32..1a5859b4b757 100644 --- a/examples/api/agg_oo.py +++ b/examples/api/agg_oo.py @@ -6,12 +6,10 @@ from matplotlib.backends.backend_agg import FigureCanvasAgg as FigureCanvas from matplotlib.figure import Figure -fig = Figure() -canvas = FigureCanvas(fig) -ax = fig.add_subplot(111) +fig, ax = plt.subplots() ax.plot([1,2,3]) ax.set_title('hi mom') ax.grid(True) ax.set_xlabel('time') ax.set_ylabel('volts') -canvas.print_figure('test') +fig.canvas.print_figure('test') diff --git a/examples/api/barchart_demo.py b/examples/api/barchart_demo.py index 2c3468a47625..a717eb7541ec 100644 --- a/examples/api/barchart_demo.py +++ b/examples/api/barchart_demo.py @@ -11,8 +11,7 @@ ind = np.arange(N) # the x locations for the groups width = 0.35 # the width of the bars -fig = plt.figure() -ax = fig.add_subplot(111) +fig, ax = plt.subplots() rects1 = ax.bar(ind, menMeans, width, color='r', yerr=menStd) womenMeans = (25, 32, 34, 20, 25) diff --git a/examples/api/collections_demo.py b/examples/api/collections_demo.py index c967be18ba22..243f1464fa47 100644 --- a/examples/api/collections_demo.py +++ b/examples/api/collections_demo.py @@ -41,69 +41,63 @@ # Make a list of colors cycling through the rgbcmyk series. colors = [colorConverter.to_rgba(c) for c in ('r','g','b','c','y','m','k')] -fig = plt.figure() +fig, axes = plt.subplots(2,2) +((ax1, ax2), (ax3, ax4)) = axes # unpack the axes + -a = fig.add_subplot(2,2,1) col = collections.LineCollection([spiral], offsets=xyo, - transOffset=a.transData) + transOffset=ax1.transData) trans = fig.dpi_scale_trans + transforms.Affine2D().scale(1.0/72.0) col.set_transform(trans) # the points to pixels transform # Note: the first argument to the collection initializer # must be a list of sequences of x,y tuples; we have only # one sequence, but we still have to put it in a list. -a.add_collection(col, autolim=True) +ax1.add_collection(col, autolim=True) # autolim=True enables autoscaling. For collections with # offsets like this, it is neither efficient nor accurate, # but it is good enough to generate a plot that you can use # as a starting point. If you know beforehand the range of # x and y that you want to show, it is better to set them # explicitly, leave out the autolim kwarg (or set it to False), - # and omit the 'a.autoscale_view()' call below. + # and omit the 'ax1.autoscale_view()' call below. # Make a transform for the line segments such that their size is # given in points: col.set_color(colors) -a.autoscale_view() # See comment above, after a.add_collection. -a.set_title('LineCollection using offsets') +ax1.autoscale_view() # See comment above, after ax1.add_collection. +ax1.set_title('LineCollection using offsets') # The same data as above, but fill the curves. - -a = fig.add_subplot(2,2,2) - col = collections.PolyCollection([spiral], offsets=xyo, - transOffset=a.transData) + transOffset=ax2.transData) trans = transforms.Affine2D().scale(fig.dpi/72.0) col.set_transform(trans) # the points to pixels transform -a.add_collection(col, autolim=True) +ax2.add_collection(col, autolim=True) col.set_color(colors) -a.autoscale_view() -a.set_title('PolyCollection using offsets') +ax2.autoscale_view() +ax2.set_title('PolyCollection using offsets') # 7-sided regular polygons -a = fig.add_subplot(2,2,3) - col = collections.RegularPolyCollection(7, sizes = np.fabs(xx)*10.0, offsets=xyo, - transOffset=a.transData) + transOffset=ax3.transData) trans = transforms.Affine2D().scale(fig.dpi/72.0) col.set_transform(trans) # the points to pixels transform -a.add_collection(col, autolim=True) +ax3.add_collection(col, autolim=True) col.set_color(colors) -a.autoscale_view() -a.set_title('RegularPolyCollection using offsets') +ax3.autoscale_view() +ax3.set_title('RegularPolyCollection using offsets') # Simulate a series of ocean current profiles, successively # offset by 0.1 m/s so that they form what is sometimes called # a "waterfall" plot or a "stagger" plot. -a = fig.add_subplot(2,2,4) - nverts = 60 ncurves = 20 offs = (0.1, 0.0) @@ -118,14 +112,14 @@ segs.append(curve) col = collections.LineCollection(segs, offsets=offs) -a.add_collection(col, autolim=True) +ax4.add_collection(col, autolim=True) col.set_color(colors) -a.autoscale_view() -a.set_title('Successive data offsets') -a.set_xlabel('Zonal velocity component (m/s)') -a.set_ylabel('Depth (m)') +ax4.autoscale_view() +ax4.set_title('Successive data offsets') +ax4.set_xlabel('Zonal velocity component (m/s)') +ax4.set_ylabel('Depth (m)') # Reverse the y-axis so depth increases downward -a.set_ylim(a.get_ylim()[::-1]) +ax4.set_ylim(ax4.get_ylim()[::-1]) plt.show() diff --git a/examples/api/compound_path.py b/examples/api/compound_path.py index 3155010954b9..ea52986c7c95 100644 --- a/examples/api/compound_path.py +++ b/examples/api/compound_path.py @@ -23,8 +23,7 @@ pathpatch = PathPatch(path, facecolor='None', edgecolor='green') -fig = plt.figure() -ax = fig.add_subplot(111) +fig, ax = plt.subplots() ax.add_patch(pathpatch) ax.set_title('A compound path') diff --git a/examples/api/date_demo.py b/examples/api/date_demo.py index 4348c2105064..1de554387718 100644 --- a/examples/api/date_demo.py +++ b/examples/api/date_demo.py @@ -28,8 +28,7 @@ datafile = cbook.get_sample_data('goog.npy') r = np.load(datafile).view(np.recarray) -fig = plt.figure() -ax = fig.add_subplot(111) +fig, ax = plt.subplots() ax.plot(r.date, r.adj_close) diff --git a/examples/api/date_index_formatter.py b/examples/api/date_index_formatter.py index 7b4843aac9ce..691e4a1e66fd 100644 --- a/examples/api/date_index_formatter.py +++ b/examples/api/date_index_formatter.py @@ -19,8 +19,7 @@ # first we'll do it the default way, with gaps on weekends -fig = plt.figure() -ax = fig.add_subplot(111) +fig, ax = plt.subplots() ax.plot(r.date, r.adj_close, 'o-') fig.autofmt_xdate() @@ -32,8 +31,7 @@ def format_date(x, pos=None): thisind = np.clip(int(x+0.5), 0, N-1) return r.date[thisind].strftime('%Y-%m-%d') -fig = plt.figure() -ax = fig.add_subplot(111) +fig, ax = plt.subplots() ax.plot(ind, r.adj_close, 'o-') ax.xaxis.set_major_formatter(ticker.FuncFormatter(format_date)) fig.autofmt_xdate() diff --git a/examples/api/demo_affine_image.py b/examples/api/demo_affine_image.py index 68e416fbfd29..036f4a526898 100644 --- a/examples/api/demo_affine_image.py +++ b/examples/api/demo_affine_image.py @@ -32,8 +32,8 @@ def imshow_affine(ax, z, *kl, **kwargs): if 1: # image rotation - - ax1 = plt.subplot(121) + + fig, (ax1, ax2) = plt.subplots(1,2) Z = get_image() im1 = imshow_affine(ax1, Z, interpolation='none', cmap=cm.jet, origin='lower', @@ -55,7 +55,6 @@ def imshow_affine(ax, z, *kl, **kwargs): # image skew - ax2 = plt.subplot(122) im2 = ax2.imshow(Z, interpolation='none', cmap=cm.jet, origin='lower', extent=[-2, 4, -3, 2], clip_on=True) diff --git a/examples/api/donut_demo.py b/examples/api/donut_demo.py index 4bc56b1be886..b36b0e7f3291 100644 --- a/examples/api/donut_demo.py +++ b/examples/api/donut_demo.py @@ -18,8 +18,7 @@ def make_circle(r): Path = mpath.Path -fig = plt.figure() -ax = fig.add_subplot(111) +fig, ax = plt.subplots() inside_vertices = make_circle(0.5) outside_vertices = make_circle(1.0) diff --git a/examples/api/engineering_formatter.py b/examples/api/engineering_formatter.py index a71f5e230450..e70803885269 100644 --- a/examples/api/engineering_formatter.py +++ b/examples/api/engineering_formatter.py @@ -7,7 +7,7 @@ from matplotlib.ticker import EngFormatter -ax = plt.subplot(111) +fig, ax = plt.subplots() ax.set_xscale('log') formatter = EngFormatter(unit='Hz', places=1) ax.xaxis.set_major_formatter(formatter) diff --git a/examples/api/fahrenheit_celsius_scales.py b/examples/api/fahrenheit_celsius_scales.py index 5250dfb34ae1..72a52f4fa41b 100644 --- a/examples/api/fahrenheit_celsius_scales.py +++ b/examples/api/fahrenheit_celsius_scales.py @@ -4,9 +4,8 @@ import matplotlib.pyplot as plt -fig = plt.figure() -ax1 = fig.add_subplot(111) # the Fahrenheit scale -ax2 = ax1.twinx() # the Celsius scale +fig, ax1 = plt.subplots() # ax1 is the Fahrenheit scale +ax2 = ax1.twinx() # ax2 is the Celsius scale def Tc(Tf): return (5./9.)*(Tf-32) diff --git a/examples/api/font_family_rc.py b/examples/api/font_family_rc.py index d379e3163471..d3b2d4acca37 100644 --- a/examples/api/font_family_rc.py +++ b/examples/api/font_family_rc.py @@ -22,8 +22,7 @@ rcParams['font.sans-serif'] = ['Tahoma'] import matplotlib.pyplot as plt -fig = plt.figure() -ax = fig.add_subplot(111) +fig, ax = plt.subplots() ax.plot([1,2,3], label='test') ax.legend() diff --git a/examples/api/font_file.py b/examples/api/font_file.py index 495b1905f679..e5f4127d1c9d 100644 --- a/examples/api/font_file.py +++ b/examples/api/font_file.py @@ -11,8 +11,7 @@ import matplotlib.pyplot as plt -fig = plt.figure() -ax = fig.add_subplot(111) +fig, ax = plt.subplots() ax.plot([1,2,3]) if sys.platform == 'win32': diff --git a/examples/api/histogram_path_demo.py b/examples/api/histogram_path_demo.py index 9b21b509d800..0789264b7bca 100644 --- a/examples/api/histogram_path_demo.py +++ b/examples/api/histogram_path_demo.py @@ -15,8 +15,7 @@ import matplotlib.patches as patches import matplotlib.path as path -fig = plt.figure() -ax = fig.add_subplot(111) +fig, ax = plt.subplots() # histogram our data with numpy data = np.random.randn(1000) diff --git a/examples/api/image_zcoord.py b/examples/api/image_zcoord.py index 170f8df5e5be..69b40135075f 100644 --- a/examples/api/image_zcoord.py +++ b/examples/api/image_zcoord.py @@ -8,8 +8,7 @@ X = 10*np.random.rand(5,3) -fig = plt.figure() -ax = fig.add_subplot(111) +fig, ax = plt.subplots() ax.imshow(X, cmap=cm.jet, interpolation='nearest') numrows, numcols = X.shape diff --git a/examples/api/joinstyle.py b/examples/api/joinstyle.py index dc1a4661f52d..0693c7c3e437 100644 --- a/examples/api/joinstyle.py +++ b/examples/api/joinstyle.py @@ -17,8 +17,7 @@ def plot_angle(ax, x, y, angle, style): ax.plot(xx[1:2], yy[1:2], 'o', color='red', markersize=3) ax.text(x,y+.2,'%.0f degrees' % angle) -fig = plt.figure() -ax = fig.add_subplot(111) +fig, ax = plt.subplots() ax.set_title('Join style') for x,style in enumerate((('miter', 'round', 'bevel'))): diff --git a/examples/api/line_with_text.py b/examples/api/line_with_text.py index 87be46d43edb..6c72aa2dfac0 100644 --- a/examples/api/line_with_text.py +++ b/examples/api/line_with_text.py @@ -50,8 +50,7 @@ def draw(self, renderer): -fig = plt.figure() -ax = fig.add_subplot(111) +fig, ax = plt.subplots() x, y = np.random.rand(2, 20) line = MyLine(x, y, mfc='red', ms=12, label='line label') #line.text.set_text('line label') diff --git a/examples/api/patch_collection.py b/examples/api/patch_collection.py index 44d3d403a19e..98b4ca4f6b58 100644 --- a/examples/api/patch_collection.py +++ b/examples/api/patch_collection.py @@ -5,8 +5,7 @@ import matplotlib.pyplot as plt -fig=plt.figure() -ax=fig.add_subplot(111) +fig, ax = plt.subplots() resolution = 50 # the number of vertices N = 3 diff --git a/examples/api/quad_bezier.py b/examples/api/quad_bezier.py index 5314dfb936b2..5bf28b94586b 100644 --- a/examples/api/quad_bezier.py +++ b/examples/api/quad_bezier.py @@ -5,8 +5,7 @@ Path = mpath.Path -fig = plt.figure() -ax = fig.add_subplot(111) +fig, ax = plt.subplots() pp1 = mpatches.PathPatch( Path([(0, 0), (1, 0), (1, 1), (0, 0)], [Path.MOVETO, Path.CURVE3, Path.CURVE3, Path.CLOSEPOLY]), diff --git a/examples/api/scatter_piecharts.py b/examples/api/scatter_piecharts.py index 48997fb11d57..424fa70411a2 100644 --- a/examples/api/scatter_piecharts.py +++ b/examples/api/scatter_piecharts.py @@ -32,8 +32,7 @@ xy3 = list(zip(x,y)) -fig = plt.figure() -ax = fig.add_subplot(111) +fig, ax = plt.subplots() ax.scatter( np.arange(3), np.arange(3), marker=(xy1,0), s=sizes, facecolor='blue' ) ax.scatter( np.arange(3), np.arange(3), marker=(xy2,0), s=sizes, facecolor='green' ) ax.scatter( np.arange(3), np.arange(3), marker=(xy3,0), s=sizes, facecolor='red' ) diff --git a/examples/api/span_regions.py b/examples/api/span_regions.py index 7acc223e1708..1cfbdcf3dd10 100644 --- a/examples/api/span_regions.py +++ b/examples/api/span_regions.py @@ -14,8 +14,7 @@ s2 = 1.2*np.sin(4*np.pi*t) -fig = plt.figure() -ax = fig.add_subplot(111) +fig, ax = plt.subplots() ax.set_title('using span_where') ax.plot(t, s1, color='black') ax.axhline(0, color='black', lw=2) diff --git a/examples/api/two_scales.py b/examples/api/two_scales.py index 475f3ac666f7..356c81336905 100644 --- a/examples/api/two_scales.py +++ b/examples/api/two_scales.py @@ -24,8 +24,7 @@ import numpy as np import matplotlib.pyplot as plt -fig = plt.figure() -ax1 = fig.add_subplot(111) +fig, ax1 = plt.subplots() t = np.arange(0.01, 10.0, 0.01) s1 = np.exp(t) ax1.plot(t, s1, 'b-') diff --git a/examples/api/unicode_minus.py b/examples/api/unicode_minus.py index 5fc352668997..d84fb04f5b03 100644 --- a/examples/api/unicode_minus.py +++ b/examples/api/unicode_minus.py @@ -11,8 +11,7 @@ import matplotlib.pyplot as plt matplotlib.rcParams['axes.unicode_minus'] = False -fig = plt.figure() -ax = fig.add_subplot(111) +fig, ax = plt.subplots() ax.plot(10*np.random.randn(100), 10*np.random.randn(100), 'o') ax.set_title('Using hypen instead of unicode minus') plt.show() diff --git a/examples/api/watermark_image.py b/examples/api/watermark_image.py index 3d437193a05a..fcfaae00abd3 100644 --- a/examples/api/watermark_image.py +++ b/examples/api/watermark_image.py @@ -13,8 +13,7 @@ im = image.imread(datafile) im[:,:,-1] = 0.5 # set the alpha channel -fig = plt.figure() -ax = fig.add_subplot(111) +fig, ax = plt.subplots() ax.plot(np.random.rand(20), '-o', ms=20, lw=2, alpha=0.7, mfc='orange') ax.grid() diff --git a/examples/api/watermark_text.py b/examples/api/watermark_text.py index 7d87de100032..0d09141050a9 100644 --- a/examples/api/watermark_text.py +++ b/examples/api/watermark_text.py @@ -7,9 +7,7 @@ import matplotlib.pyplot as plt -fig = plt.figure() - -ax = fig.add_subplot(111) +fig, ax = plt.subplots() ax.plot(np.random.rand(20), '-o', ms=20, lw=2, alpha=0.7, mfc='orange') ax.grid() diff --git a/examples/axes_grid/demo_axes_divider.py b/examples/axes_grid/demo_axes_divider.py index 5a0652cf1052..df56d9f3f532 100644 --- a/examples/axes_grid/demo_axes_divider.py +++ b/examples/axes_grid/demo_axes_divider.py @@ -75,7 +75,7 @@ def demo_locatable_axes_easy(ax): ax_cb.yaxis.tick_right() -def demo_images_side_by_sied(ax): +def demo_images_side_by_side(ax): from mpl_toolkits.axes_grid1 import make_axes_locatable divider = make_axes_locatable(ax) @@ -120,7 +120,7 @@ def demo(): # two images side by side with fixed padding. ax = fig1.add_subplot(2, 2, 4) - demo_images_side_by_sied(ax) + demo_images_side_by_side(ax) plt.draw() plt.show() diff --git a/examples/axes_grid/demo_axes_hbox_divider.py b/examples/axes_grid/demo_axes_hbox_divider.py index fe72bdc14195..f63061ac45e7 100644 --- a/examples/axes_grid/demo_axes_hbox_divider.py +++ b/examples/axes_grid/demo_axes_hbox_divider.py @@ -23,19 +23,15 @@ def make_heights_equal(fig, rect, ax1, ax2, pad): if __name__ == "__main__": - fig1 = plt.figure() - arr1 = np.arange(20).reshape((4,5)) arr2 = np.arange(20).reshape((5,4)) - ax1 = plt.subplot(121) - ax2 = plt.subplot(122) - + fig, (ax1, ax2) = plt.subplots(1,2) ax1.imshow(arr1, interpolation="nearest") ax2.imshow(arr2, interpolation="nearest") rect = 111 # subplot param for combined axes - make_heights_equal(fig1, rect, ax1, ax2, pad=0.5) # pad in inches + make_heights_equal(fig, rect, ax1, ax2, pad=0.5) # pad in inches for ax in [ax1, ax2]: ax.locator_params(nbins=4) @@ -44,7 +40,9 @@ def make_heights_equal(fig, rect, ax1, ax2, pad): ax3 = plt.axes([0.5, 0.5, 0.001, 0.001], frameon=False) ax3.xaxis.set_visible(False) ax3.yaxis.set_visible(False) - ax3.annotate("Location of two axes are adjusted\n so that they have equal heights\n while maintaining their aspect ratios", (0.5, 0.5), + ax3.annotate("Location of two axes are adjusted\n" + "so that they have equal heights\n" + "while maintaining their aspect ratios", (0.5, 0.5), xycoords="axes fraction", va="center", ha="center", bbox=dict(boxstyle="round, pad=1", fc="w")) diff --git a/examples/axes_grid/demo_axes_rgb.py b/examples/axes_grid/demo_axes_rgb.py index 08c704c08ed2..b7374c2766d6 100644 --- a/examples/axes_grid/demo_axes_rgb.py +++ b/examples/axes_grid/demo_axes_rgb.py @@ -41,10 +41,7 @@ def make_cube(r, g, b): def demo_rgb(): - fig = plt.figure(1) - fig.clf() - - ax = fig.add_subplot(111) + fig, ax = plt.subplots() ax_r, ax_g, ax_b = make_rgb_axes(ax, pad=0.02) #fig.add_axes(ax_r) #fig.add_axes(ax_g) diff --git a/examples/axes_grid/demo_colorbar_with_inset_locator.py b/examples/axes_grid/demo_colorbar_with_inset_locator.py index bc5cd79cfc6c..1085e45d95ee 100644 --- a/examples/axes_grid/demo_colorbar_with_inset_locator.py +++ b/examples/axes_grid/demo_colorbar_with_inset_locator.py @@ -2,10 +2,7 @@ from mpl_toolkits.axes_grid1.inset_locator import inset_axes -fig = plt.figure(1, [6, 3]) - -# first subplot -ax1 = fig.add_subplot(121) +fig, (ax1, ax2) = plt.subplots(1, 2, figsize=[6, 3]) axins1 = inset_axes(ax1, width="50%", # width = 10% of parent_bbox width @@ -16,15 +13,12 @@ plt.colorbar(im1, cax=axins1, orientation="horizontal", ticks=[1,2,3]) axins1.xaxis.set_ticks_position("bottom") -# first subplot -ax = fig.add_subplot(122) - -axins = inset_axes(ax, +axins = inset_axes(ax2, width="5%", # width = 10% of parent_bbox width height="50%", # height : 50% loc=3, bbox_to_anchor=(1.05, 0., 1, 1), - bbox_transform=ax.transAxes, + bbox_transform=ax2.transAxes, borderpad=0, ) @@ -32,7 +26,7 @@ # of the legend. you may want to play with the borderpad value and # the bbox_to_anchor coordinate. -im=ax.imshow([[1,2],[2, 3]]) +im=ax2.imshow([[1,2],[2, 3]]) plt.colorbar(im, cax=axins, ticks=[1,2,3]) plt.draw() diff --git a/examples/axes_grid/inset_locator_demo.py b/examples/axes_grid/inset_locator_demo.py index 9dfe0024feb7..78c97da089d5 100644 --- a/examples/axes_grid/inset_locator_demo.py +++ b/examples/axes_grid/inset_locator_demo.py @@ -14,10 +14,9 @@ def add_sizebar(ax, size): ax.add_artist(asb) -fig = plt.figure(1, [5.5, 3]) +fig, (ax,ax2) = plt.subplots(1,2, figsize=[5.5, 3]) # first subplot -ax = fig.add_subplot(1,2,1) ax.set_aspect(1.) axins = inset_axes(ax, @@ -30,15 +29,14 @@ def add_sizebar(ax, size): # second subplot -ax = fig.add_subplot(1,2,2) -ax.set_aspect(1.) +ax2.set_aspect(1.) -axins = zoomed_inset_axes(ax, 0.5, loc=1) # zoom = 0.5 +axins = zoomed_inset_axes(ax2, 0.5, loc=1) # zoom = 0.5 plt.xticks(visible=False) plt.yticks(visible=False) -add_sizebar(ax, 0.5) +add_sizebar(ax2, 0.5) add_sizebar(axins, 0.5) plt.draw() diff --git a/examples/axes_grid/inset_locator_demo2.py b/examples/axes_grid/inset_locator_demo2.py index a4e08be34931..211faa4bffd8 100644 --- a/examples/axes_grid/inset_locator_demo2.py +++ b/examples/axes_grid/inset_locator_demo2.py @@ -13,9 +13,7 @@ def get_demo_image(): # z is a numpy array of 15x15 return z, (-3,4,-4,3) - -fig = plt.figure(1, [5,4]) -ax = fig.add_subplot(111) +fig, ax = plt.subplots(figsize=[5,4]) # prepare the demo image Z, extent = get_demo_image() diff --git a/examples/axes_grid/scatter_hist.py b/examples/axes_grid/scatter_hist.py index b846704e0e71..273ae5d9348c 100644 --- a/examples/axes_grid/scatter_hist.py +++ b/examples/axes_grid/scatter_hist.py @@ -1,17 +1,15 @@ import numpy as np import matplotlib.pyplot as plt +from mpl_toolkits.axes_grid1 import make_axes_locatable # the random data x = np.random.randn(1000) y = np.random.randn(1000) -fig = plt.figure(1, figsize=(5.5,5.5)) - -from mpl_toolkits.axes_grid1 import make_axes_locatable +fig, axScatter = plt.subplots(figsize=(5.5,5.5)) # the scatter plot: -axScatter = plt.subplot(111) axScatter.scatter(x, y) axScatter.set_aspect(1.) diff --git a/examples/event_handling/data_browser.py b/examples/event_handling/data_browser.py index 7e11c3fade42..d4c9692552ee 100644 --- a/examples/event_handling/data_browser.py +++ b/examples/event_handling/data_browser.py @@ -70,11 +70,9 @@ def update(self): xs = np.mean(X, axis=1) ys = np.std(X, axis=1) - fig = plt.figure() - ax = fig.add_subplot(211) + fig, (ax, ax2) = plt.subplots(2, 1) ax.set_title('click on point to plot time series') line, = ax.plot(xs, ys, 'o', picker=5) # 5 points tolerance - ax2 = fig.add_subplot(212) browser = PointBrowser() diff --git a/examples/event_handling/figure_axes_enter_leave.py b/examples/event_handling/figure_axes_enter_leave.py index 7b9175ff3860..af6de53e8e60 100644 --- a/examples/event_handling/figure_axes_enter_leave.py +++ b/examples/event_handling/figure_axes_enter_leave.py @@ -25,20 +25,16 @@ def leave_figure(event): event.canvas.figure.patch.set_facecolor('grey') event.canvas.draw() -fig1 = plt.figure() +fig1, (ax, ax2) = plt.subplots(2, 1) fig1.suptitle('mouse hover over figure or axes to trigger events') -ax1 = fig1.add_subplot(211) -ax2 = fig1.add_subplot(212) fig1.canvas.mpl_connect('figure_enter_event', enter_figure) fig1.canvas.mpl_connect('figure_leave_event', leave_figure) fig1.canvas.mpl_connect('axes_enter_event', enter_axes) fig1.canvas.mpl_connect('axes_leave_event', leave_axes) -fig2 = plt.figure() +fig2, (ax, ax2) = plt.subplots(2, 1) fig2.suptitle('mouse hover over figure or axes to trigger events') -ax1 = fig2.add_subplot(211) -ax2 = fig2.add_subplot(212) fig2.canvas.mpl_connect('figure_enter_event', enter_figure) fig2.canvas.mpl_connect('figure_leave_event', leave_figure) diff --git a/examples/event_handling/idle_and_timeout.py b/examples/event_handling/idle_and_timeout.py index 6dbff324a390..a6de8195f10e 100644 --- a/examples/event_handling/idle_and_timeout.py +++ b/examples/event_handling/idle_and_timeout.py @@ -7,8 +7,7 @@ import numpy as np import matplotlib.pyplot as plt -fig = plt.figure() -ax = fig.add_subplot(111) +fig, ax = plt.subplots() t = np.arange(0.0, 2.0, 0.01) y1 = np.sin(2*np.pi*t) diff --git a/examples/event_handling/keypress_demo.py b/examples/event_handling/keypress_demo.py index 68c36c655ea5..d814c8ce334b 100755 --- a/examples/event_handling/keypress_demo.py +++ b/examples/event_handling/keypress_demo.py @@ -17,8 +17,7 @@ def press(event): xl.set_visible(not visible) fig.canvas.draw() -fig = plt.figure() -ax = fig.add_subplot(111) +fig, ax = plt.subplots() fig.canvas.mpl_connect('key_press_event', press) diff --git a/examples/event_handling/legend_picking.py b/examples/event_handling/legend_picking.py index 4505b09bd971..1c37ad3c6e85 100644 --- a/examples/event_handling/legend_picking.py +++ b/examples/event_handling/legend_picking.py @@ -8,8 +8,7 @@ y1 = 2*np.sin(2*np.pi*t) y2 = 4*np.sin(2*np.pi*2*t) -fig = plt.figure() -ax = fig.add_subplot(111) +fig, ax = plt.subplots() ax.set_title('Click on legend line to toggle line on/off') line1, = ax.plot(t, y1, lw=2, color='red', label='1 HZ') line2, = ax.plot(t, y2, lw=2, color='blue', label='2 HZ') diff --git a/examples/event_handling/looking_glass.py b/examples/event_handling/looking_glass.py index 3ceeb68f8231..eb98998d0832 100644 --- a/examples/event_handling/looking_glass.py +++ b/examples/event_handling/looking_glass.py @@ -3,8 +3,7 @@ import matplotlib.patches as patches x, y = np.random.rand(2, 200) -fig = plt.figure() -ax = fig.add_subplot(111) +fig, ax = plt.subplots() circ = patches.Circle( (0.5, 0.5), 0.25, alpha=0.8, fc='yellow') ax.add_patch(circ) diff --git a/examples/event_handling/path_editor.py b/examples/event_handling/path_editor.py index 38148c78dffc..7fb82dff50a2 100644 --- a/examples/event_handling/path_editor.py +++ b/examples/event_handling/path_editor.py @@ -5,8 +5,7 @@ Path = mpath.Path -fig = plt.figure() -ax = fig.add_subplot(111) +fig, ax = plt.subplots() pathdata = [ (Path.MOVETO, (1.58, -2.57)), diff --git a/examples/event_handling/pick_event_demo.py b/examples/event_handling/pick_event_demo.py index 68a27e4c221a..57bfa0b6b10b 100755 --- a/examples/event_handling/pick_event_demo.py +++ b/examples/event_handling/pick_event_demo.py @@ -65,7 +65,7 @@ def pick_handler(event): """ from __future__ import print_function -from matplotlib.pyplot import figure, show +import matplotlib.pyplot as plt from matplotlib.lines import Line2D from matplotlib.patches import Rectangle from matplotlib.text import Text @@ -74,15 +74,12 @@ def pick_handler(event): from numpy.random import rand if 1: # simple picking, lines, rectangles and text - fig = figure() - ax1 = fig.add_subplot(211) + fig, (ax1, ax2) = plt.subplots(2,1) ax1.set_title('click on points, rectangles or text', picker=True) ax1.set_ylabel('ylabel', picker=True, bbox=dict(facecolor='red')) line, = ax1.plot(rand(100), 'o', picker=5) # 5 points tolerance # pick the rectangle - ax2 = fig.add_subplot(212) - bars = ax2.bar(range(10), rand(10), picker=True) for label in ax2.get_xticklabels(): # make the xtick labels pickable label.set_picker(True) @@ -140,10 +137,9 @@ def line_picker(line, mouseevent): def onpick2(event): print('onpick2 line:', event.pickx, event.picky) - fig = figure() - ax1 = fig.add_subplot(111) - ax1.set_title('custom picker for line data') - line, = ax1.plot(rand(100), rand(100), 'o', picker=line_picker) + fig, ax = plt.subplots() + ax.set_title('custom picker for line data') + line, = ax.plot(rand(100), rand(100), 'o', picker=line_picker) fig.canvas.mpl_connect('pick_event', onpick2) @@ -154,20 +150,18 @@ def onpick3(event): ind = event.ind print('onpick3 scatter:', ind, np.take(x, ind), np.take(y, ind)) - fig = figure() - ax1 = fig.add_subplot(111) - col = ax1.scatter(x, y, 100*s, c, picker=True) + fig, ax = plt.subplots() + col = ax.scatter(x, y, 100*s, c, picker=True) #fig.savefig('pscoll.eps') fig.canvas.mpl_connect('pick_event', onpick3) if 1: # picking images (matplotlib.image.AxesImage) - fig = figure() - ax1 = fig.add_subplot(111) - im1 = ax1.imshow(rand(10,5), extent=(1,2,1,2), picker=True) - im2 = ax1.imshow(rand(5,10), extent=(3,4,1,2), picker=True) - im3 = ax1.imshow(rand(20,25), extent=(1,2,3,4), picker=True) - im4 = ax1.imshow(rand(30,12), extent=(3,4,3,4), picker=True) - ax1.axis([0,5,0,5]) + fig, ax = plt.subplots() + im1 = ax.imshow(rand(10,5), extent=(1,2,1,2), picker=True) + im2 = ax.imshow(rand(5,10), extent=(3,4,1,2), picker=True) + im3 = ax.imshow(rand(20,25), extent=(1,2,3,4), picker=True) + im4 = ax.imshow(rand(30,12), extent=(3,4,3,4), picker=True) + ax.axis([0,5,0,5]) def onpick4(event): artist = event.artist @@ -179,5 +173,5 @@ def onpick4(event): fig.canvas.mpl_connect('pick_event', onpick4) -show() +plt.show() diff --git a/examples/event_handling/pick_event_demo2.py b/examples/event_handling/pick_event_demo2.py index 0f4513309be8..3d2a18e685a0 100644 --- a/examples/event_handling/pick_event_demo2.py +++ b/examples/event_handling/pick_event_demo2.py @@ -11,8 +11,7 @@ xs = numpy.mean(X, axis=1) ys = numpy.std(X, axis=1) -fig = plt.figure() -ax = fig.add_subplot(111) +fig, ax = plt.subplots() ax.set_title('click on point to plot time series') line, = ax.plot(xs, ys, 'o', picker=5) # 5 points tolerance diff --git a/examples/event_handling/poly_editor.py b/examples/event_handling/poly_editor.py index c7d96df66d51..191740cd242d 100644 --- a/examples/event_handling/poly_editor.py +++ b/examples/event_handling/poly_editor.py @@ -145,7 +145,6 @@ def motion_notify_callback(self, event): import matplotlib.pyplot as plt from matplotlib.patches import Polygon - fig = plt.figure() theta = np.arange(0, 2*np.pi, 0.1) r = 1.5 @@ -154,7 +153,7 @@ def motion_notify_callback(self, event): poly = Polygon(list(zip(xs, ys)), animated=True) - ax = plt.subplot(111) + fig, ax = plt.subplots() ax.add_patch(poly) p = PolygonInteractor(ax, poly) diff --git a/examples/event_handling/pong_gtk.py b/examples/event_handling/pong_gtk.py index fb8479f6301a..24469a123dfc 100755 --- a/examples/event_handling/pong_gtk.py +++ b/examples/event_handling/pong_gtk.py @@ -16,8 +16,7 @@ import pipong -fig = plt.figure() -ax = fig.add_subplot(111) +fig, ax = plt.subplots() canvas = ax.figure.canvas diff --git a/examples/event_handling/resample.py b/examples/event_handling/resample.py index a9df778cd3e4..76c9514d3a76 100644 --- a/examples/event_handling/resample.py +++ b/examples/event_handling/resample.py @@ -39,8 +39,7 @@ def update(self, ax): d = DataDisplayDownsampler(xdata, ydata) -fig = plt.figure() -ax = fig.add_subplot(1, 1, 1) +fig, ax = plt.subplots() #Hook up the line xdata, ydata = d.downsample(xdata[0], xdata[-1]) diff --git a/examples/event_handling/timers.py b/examples/event_handling/timers.py index 2541f11aae3e..0e293a84975c 100644 --- a/examples/event_handling/timers.py +++ b/examples/event_handling/timers.py @@ -8,8 +8,7 @@ def update_title(axes): axes.set_title(datetime.now()) axes.figure.canvas.draw() -fig = plt.figure() -ax = fig.add_subplot(1, 1, 1) +fig, ax = plt.subplots() x = np.linspace(-3, 3) ax.plot(x, x*x) diff --git a/examples/event_handling/viewlims.py b/examples/event_handling/viewlims.py index fe5838cbc6c6..be2565366af5 100644 --- a/examples/event_handling/viewlims.py +++ b/examples/event_handling/viewlims.py @@ -58,11 +58,8 @@ def ax_update(self, ax): md = MandlebrotDisplay() Z = md(-2., 0.5, -1.25, 1.25) -fig = plt.figure() -ax1 = fig.add_subplot(1, 2, 1) +fig1, (ax1, ax2) = plt.subplots(1, 2) ax1.imshow(Z, origin='lower', extent=(md.x.min(), md.x.max(), md.y.min(), md.y.max())) - -ax2 = fig.add_subplot(1, 2, 2) ax2.imshow(Z, origin='lower', extent=(md.x.min(), md.x.max(), md.y.min(), md.y.max())) rect = UpdatingRect([0, 0], 0, 0, facecolor='None', edgecolor='black') diff --git a/examples/misc/longshort.py b/examples/misc/longshort.py index 06b0302b80d0..9cb2a2a50890 100644 --- a/examples/misc/longshort.py +++ b/examples/misc/longshort.py @@ -38,8 +38,7 @@ tr = (1+g).cumprod() # the total return # plot the return -fig = plt.figure() -ax = fig.add_subplot(111) +fig, ax = plt.subplots() ax.plot(r.date, tr) ax.set_title('total return: long APPL, short GOOG') ax.grid() diff --git a/examples/misc/multiprocess.py b/examples/misc/multiprocess.py index 09aa4ed94462..1d2b12b30476 100644 --- a/examples/misc/multiprocess.py +++ b/examples/misc/multiprocess.py @@ -53,9 +53,7 @@ def __call__(self, pipe): print('starting plotter...') self.pipe = pipe - self.fig = plt.figure() - - self.ax = self.fig.add_subplot(111) + self.fig, self.ax = plt.subplots() self.gid = gobject.timeout_add(1000, self.poll_draw()) print('...done') diff --git a/examples/misc/rasterization_demo.py b/examples/misc/rasterization_demo.py index a03daaac9278..067099c56a28 100644 --- a/examples/misc/rasterization_demo.py +++ b/examples/misc/rasterization_demo.py @@ -8,19 +8,17 @@ xx = x*np.cos(theta) - y*np.sin(theta) yy = x*np.sin(theta) + y*np.cos(theta) -ax1 = plt.subplot(221) +fig, ((ax1, ax2), (ax3, ax4)) = plt.subplots(2, 2) ax1.set_aspect(1) ax1.pcolormesh(xx, yy, d) ax1.set_title("No Rasterization") -ax2 = plt.subplot(222) ax2.set_aspect(1) ax2.set_title("Rasterization") m = ax2.pcolormesh(xx, yy, d) m.set_rasterized(True) -ax3 = plt.subplot(223) ax3.set_aspect(1) ax3.pcolormesh(xx, yy, d) ax3.text(0.5, 0.5, "Text", alpha=0.2, @@ -29,7 +27,6 @@ ax3.set_title("No Rasterization") -ax4 = plt.subplot(224) ax4.set_aspect(1) m = ax4.pcolormesh(xx, yy, d) m.set_zorder(-20) diff --git a/examples/pylab_examples/agg_buffer_to_array.py b/examples/pylab_examples/agg_buffer_to_array.py index a391fb2ca7cd..11f7f0caaeec 100644 --- a/examples/pylab_examples/agg_buffer_to_array.py +++ b/examples/pylab_examples/agg_buffer_to_array.py @@ -3,8 +3,7 @@ import numpy as np # make an agg figure -fig = figure() -ax = fig.add_subplot(111) +fig, ax = plt.subplots() ax.plot([1,2,3]) ax.set_title('a simple figure') fig.canvas.draw() diff --git a/examples/pylab_examples/annotation_demo3.py b/examples/pylab_examples/annotation_demo3.py index cf78da77cdbb..31261ae66bb6 100644 --- a/examples/pylab_examples/annotation_demo3.py +++ b/examples/pylab_examples/annotation_demo3.py @@ -1,10 +1,6 @@ import matplotlib.pyplot as plt -fig = plt.figure(1) -fig.clf() - -ax1 = plt.subplot(121) -ax2 = plt.subplot(122) +fig, (ax1, ax2) = plt.subplots(1, 2) bbox_args = dict(boxstyle="round", fc="0.8") arrow_args = dict(arrowstyle="->") diff --git a/examples/pylab_examples/aspect_loglog.py b/examples/pylab_examples/aspect_loglog.py index 4ce384633e91..db22322d8be6 100644 --- a/examples/pylab_examples/aspect_loglog.py +++ b/examples/pylab_examples/aspect_loglog.py @@ -1,6 +1,6 @@ import matplotlib.pyplot as plt -ax1 = plt.subplot(121) +fig, (ax1, ax2) = plt.subplots(1, 2) ax1.set_xscale("log") ax1.set_yscale("log") ax1.set_xlim(1e1, 1e3) @@ -8,7 +8,6 @@ ax1.set_aspect(1) ax1.set_title("adjustable = box") -ax2 = plt.subplot(122) ax2.set_xscale("log") ax2.set_yscale("log") ax2.set_adjustable("datalim") diff --git a/examples/pylab_examples/axes_props.py b/examples/pylab_examples/axes_props.py index 7fe564ef7d49..6f1324b5ad53 100644 --- a/examples/pylab_examples/axes_props.py +++ b/examples/pylab_examples/axes_props.py @@ -36,7 +36,7 @@ t = arange(0.0, 2.0, 0.01) s = sin(2*pi*t) -ax = subplot(111) +fig, ax = plt.subplots() ax.plot(t, s) ax.grid(True) diff --git a/examples/pylab_examples/barchart_demo.py b/examples/pylab_examples/barchart_demo.py index e71357d743e3..2cc9860d3889 100644 --- a/examples/pylab_examples/barchart_demo.py +++ b/examples/pylab_examples/barchart_demo.py @@ -7,11 +7,9 @@ n_groups = 5 -means_men = (20, 35, 30, 35, 27) -std_men = (2, 3, 4, 1, 2) - means_women = (25, 32, 34, 20, 25) std_women = (3, 5, 2, 3, 3) +fig, ax = plt.subplots() index = np.arange(n_groups) bar_width = 0.35 diff --git a/examples/pylab_examples/barchart_demo2.py b/examples/pylab_examples/barchart_demo2.py index 0886fe8fded8..391cd168c9d7 100644 --- a/examples/pylab_examples/barchart_demo2.py +++ b/examples/pylab_examples/barchart_demo2.py @@ -28,8 +28,8 @@ scores = ['7', '48', '12:52', '17', '14'] rankings = np.round(np.random.uniform(0, 1, numTests)*100, 0) -fig = plt.figure(figsize=(9,7)) -ax1 = fig.add_subplot(111) + +fig, ax1 = plt.subplots(figsize=(9,7)) plt.subplots_adjust(left=0.115, right=0.88) fig.canvas.set_window_title('Eldorado K-8 Fitness Chart') pos = np.arange(numTests)+0.5 #Center bars on the Y-axis ticks diff --git a/examples/pylab_examples/boxplot_demo2.py b/examples/pylab_examples/boxplot_demo2.py index 6f4c9ad3e878..5a5b8a4e1c27 100644 --- a/examples/pylab_examples/boxplot_demo2.py +++ b/examples/pylab_examples/boxplot_demo2.py @@ -34,9 +34,8 @@ data = [norm, normBoot, logn, lognBoot, expo, expoBoot, gumb, gumbBoot, tria, triaBoot] -fig = plt.figure(figsize=(10,6)) +fig, ax1 = plt.subplots(figsize=(10,6)) fig.canvas.set_window_title('A Boxplot Example') -ax1 = fig.add_subplot(111) plt.subplots_adjust(left=0.075, right=0.95, top=0.9, bottom=0.25) bp = plt.boxplot(data, notch=0, sym='+', vert=1, whis=1.5) diff --git a/examples/pylab_examples/boxplot_demo3.py b/examples/pylab_examples/boxplot_demo3.py index fe7e5b77a3d5..42e39d8007df 100644 --- a/examples/pylab_examples/boxplot_demo3.py +++ b/examples/pylab_examples/boxplot_demo3.py @@ -34,8 +34,7 @@ def fakeBootStrapper(n): medians = [None, None, med1, med2] conf_intervals = [None, None, CI1, CI2] -fig = plt.figure() -ax = fig.add_subplot(111) +fig, ax = plt.subplots() pos = np.array(range(len(treatments)))+1 bp = ax.boxplot(treatments, sym='k+', positions=pos, notch=1, bootstrap=5000, diff --git a/examples/pylab_examples/broken_barh.py b/examples/pylab_examples/broken_barh.py index 3d427e61f618..9d8085f52252 100644 --- a/examples/pylab_examples/broken_barh.py +++ b/examples/pylab_examples/broken_barh.py @@ -3,8 +3,7 @@ """ import matplotlib.pyplot as plt -fig = plt.figure() -ax = fig.add_subplot(111) +fig, ax = plt.subplots() ax.broken_barh([ (110, 30), (150, 10) ] , (10, 9), facecolors='blue') ax.broken_barh([ (10, 50), (100, 20), (130, 10)] , (20, 9), facecolors=('red', 'yellow', 'green')) diff --git a/examples/pylab_examples/centered_ticklabels.py b/examples/pylab_examples/centered_ticklabels.py index b6e40deb50fd..2063a3ea665f 100644 --- a/examples/pylab_examples/centered_ticklabels.py +++ b/examples/pylab_examples/centered_ticklabels.py @@ -25,8 +25,7 @@ r = np.load(fh); fh.close() r = r[-250:] # get the last 250 days -fig = plt.figure() -ax = fig.add_subplot(111) +fig, ax = plt.subplots() ax.plot(r.date, r.adj_close) ax.xaxis.set_major_locator(dates.MonthLocator()) diff --git a/examples/pylab_examples/colorbar_tick_labelling_demo.py b/examples/pylab_examples/colorbar_tick_labelling_demo.py index 63c84232a04e..1a368da458f2 100644 --- a/examples/pylab_examples/colorbar_tick_labelling_demo.py +++ b/examples/pylab_examples/colorbar_tick_labelling_demo.py @@ -9,8 +9,7 @@ from numpy.random import randn # Make plot with vertical (default) colorbar -fig = plt.figure() -ax = fig.add_subplot(111) +fig, ax = plt.subplots() data = np.clip(randn(250, 250), -1, 1) @@ -22,8 +21,7 @@ cbar.ax.set_yticklabels(['< -1', '0', '> 1'])# vertically oriented colorbar # Make plot with horizontal colorbar -fig = plt.figure() -ax = fig.add_subplot(111) +fig, ax = plt.subplots() data = np.clip(randn(250, 250), -1, 1) diff --git a/examples/pylab_examples/coords_demo.py b/examples/pylab_examples/coords_demo.py index 9f6cdcb87000..fb92f73943e0 100755 --- a/examples/pylab_examples/coords_demo.py +++ b/examples/pylab_examples/coords_demo.py @@ -10,7 +10,7 @@ t = arange(0.0, 1.0, 0.01) s = sin(2*pi*t) -ax = subplot(111) +fig, ax = plt.subplots() ax.plot(t,s) diff --git a/examples/pylab_examples/coords_report.py b/examples/pylab_examples/coords_report.py index 9710e887b82f..f2fc9a40d266 100644 --- a/examples/pylab_examples/coords_report.py +++ b/examples/pylab_examples/coords_report.py @@ -10,7 +10,7 @@ def millions(x): x = rand(20) y = 1e7*rand(20) -ax = subplot(111) +fig, ax = plt.subplots() ax.fmt_ydata = millions plot(x, y, 'o') diff --git a/examples/pylab_examples/cursor_demo.py b/examples/pylab_examples/cursor_demo.py index e98854f02c37..02dc69284e25 100755 --- a/examples/pylab_examples/cursor_demo.py +++ b/examples/pylab_examples/cursor_demo.py @@ -68,7 +68,7 @@ def mouse_move(self, event): t = arange(0.0, 1.0, 0.01) s = sin(2*2*pi*t) -ax = subplot(111) +fig, ax = plt.subplots() cursor = Cursor(ax) #cursor = SnaptoCursor(ax, t, s) diff --git a/examples/pylab_examples/custom_ticker1.py b/examples/pylab_examples/custom_ticker1.py index 8dc453f7acad..364b12c96c71 100755 --- a/examples/pylab_examples/custom_ticker1.py +++ b/examples/pylab_examples/custom_ticker1.py @@ -22,7 +22,7 @@ def millions(x, pos): formatter = FuncFormatter(millions) -ax = subplot(111) +fig, ax = plt.subplots() ax.yaxis.set_major_formatter(formatter) bar(x, money) xticks( x + 0.5, ('Bill', 'Fred', 'Mary', 'Sue') ) diff --git a/examples/pylab_examples/dashpointlabel.py b/examples/pylab_examples/dashpointlabel.py index fe5149d5f878..248de6f82b43 100644 --- a/examples/pylab_examples/dashpointlabel.py +++ b/examples/pylab_examples/dashpointlabel.py @@ -15,9 +15,7 @@ (1, 20, 30, 60, 10), ) -fig = pylab.figure() -ax = fig.add_subplot(111) - +fig, ax = plt.subplots() (x,y) = zip(*DATA) ax.plot(x, y, marker='o') diff --git a/examples/pylab_examples/date_demo1.py b/examples/pylab_examples/date_demo1.py index bc5370bef52c..1a26d66fd6d3 100644 --- a/examples/pylab_examples/date_demo1.py +++ b/examples/pylab_examples/date_demo1.py @@ -33,8 +33,7 @@ dates = [q[0] for q in quotes] opens = [q[1] for q in quotes] -fig = figure() -ax = fig.add_subplot(111) +fig, ax = plt.subplots() ax.plot_date(dates, opens, '-') # format the ticks diff --git a/examples/pylab_examples/date_demo2.py b/examples/pylab_examples/date_demo2.py index 6fa276cf233c..8fc86e90ce8c 100755 --- a/examples/pylab_examples/date_demo2.py +++ b/examples/pylab_examples/date_demo2.py @@ -32,8 +32,7 @@ dates = [q[0] for q in quotes] opens = [q[1] for q in quotes] -fig = figure() -ax = fig.add_subplot(111) +fig, ax = plt.subplots() ax.plot_date(dates, opens, '-') ax.xaxis.set_major_locator(months) ax.xaxis.set_major_formatter(monthsFmt) diff --git a/examples/pylab_examples/date_demo_convert.py b/examples/pylab_examples/date_demo_convert.py index d2ad0d096146..36af442ed1ac 100644 --- a/examples/pylab_examples/date_demo_convert.py +++ b/examples/pylab_examples/date_demo_convert.py @@ -12,8 +12,7 @@ y = arange( len(dates)*1.0) -fig = figure() -ax = fig.add_subplot(111) +fig, ax = plt.subplots() ax.plot_date(dates, y*y) # this is superfluous, since the autoscaler should get it right, but diff --git a/examples/pylab_examples/date_demo_rrule.py b/examples/pylab_examples/date_demo_rrule.py index d0df79caec30..c27106deff4f 100644 --- a/examples/pylab_examples/date_demo_rrule.py +++ b/examples/pylab_examples/date_demo_rrule.py @@ -21,7 +21,7 @@ s = rand(len(dates)) # make up some random y values -ax = subplot(111) +fig, ax = plt.subplots() plot_date(dates, s) ax.xaxis.set_major_locator(loc) ax.xaxis.set_major_formatter(formatter) diff --git a/examples/pylab_examples/date_index_formatter.py b/examples/pylab_examples/date_index_formatter.py index 9b1144544283..6df72b8ef93c 100644 --- a/examples/pylab_examples/date_index_formatter.py +++ b/examples/pylab_examples/date_index_formatter.py @@ -33,8 +33,7 @@ def __call__(self, x, pos=0): formatter = MyFormatter(r.date) -fig = figure() -ax = fig.add_subplot(111) +fig, ax = plt.subplots() ax.xaxis.set_major_formatter(formatter) ax.plot(numpy.arange(len(r)), r.close, 'o-') fig.autofmt_xdate() diff --git a/examples/pylab_examples/demo_annotation_box.py b/examples/pylab_examples/demo_annotation_box.py index ed1fd71943c4..169c52c8d8e0 100644 --- a/examples/pylab_examples/demo_annotation_box.py +++ b/examples/pylab_examples/demo_annotation_box.py @@ -6,9 +6,7 @@ import numpy as np if 1: - fig = plt.gcf() - fig.clf() - ax = plt.subplot(111) + fig, ax = plt.subplots() offsetbox = TextArea("Test 1", minimumdescent=False) diff --git a/examples/pylab_examples/demo_ribbon_box.py b/examples/pylab_examples/demo_ribbon_box.py index 9ab0be183ec1..617c731588ab 100644 --- a/examples/pylab_examples/demo_ribbon_box.py +++ b/examples/pylab_examples/demo_ribbon_box.py @@ -96,9 +96,7 @@ def draw(self, renderer, *args, **kwargs): from matplotlib.transforms import Bbox, TransformedBbox from matplotlib.ticker import ScalarFormatter - fig = plt.gcf() - fig.clf() - ax = plt.subplot(111) + fig, ax = plt.subplots() years = np.arange(2004, 2009) box_colors = [(0.8, 0.2, 0.2), diff --git a/examples/pylab_examples/dolphin.py b/examples/pylab_examples/dolphin.py index f457ccc0c796..e02fa41200a7 100644 --- a/examples/pylab_examples/dolphin.py +++ b/examples/pylab_examples/dolphin.py @@ -11,8 +11,7 @@ x = r * np.cos(t) y = r * np.sin(t) -fig = plt.figure(figsize=(6,6)) -ax = plt.subplot(111) +fig, ax = plt.subplots(figsize=(6,6)) circle = Circle((0, 0), 1, facecolor='none', edgecolor=(0,0.8,0.8), linewidth=3, alpha=0.5) ax.add_patch(circle) diff --git a/examples/pylab_examples/ellipse_collection.py b/examples/pylab_examples/ellipse_collection.py index bc228db77e89..a6a06a5f4054 100644 --- a/examples/pylab_examples/ellipse_collection.py +++ b/examples/pylab_examples/ellipse_collection.py @@ -13,7 +13,7 @@ aa = X*9 -ax = plt.subplot(1,1,1) +fig, ax = plt.subplots() ec = EllipseCollection( ww, diff --git a/examples/pylab_examples/fill_between_demo.py b/examples/pylab_examples/fill_between_demo.py index 1dd2dc2ea36d..921f93677659 100644 --- a/examples/pylab_examples/fill_between_demo.py +++ b/examples/pylab_examples/fill_between_demo.py @@ -47,8 +47,7 @@ # arrays to a very fine grid before plotting. # show how to use transforms to create axes spans where a certain condition is satisfied -fig = figure() -ax = fig.add_subplot(111) +fig, ax = plt.subplots() y = np.sin(4*np.pi*x) ax.plot(x, y, color='black') diff --git a/examples/pylab_examples/finance_demo.py b/examples/pylab_examples/finance_demo.py index c14b750f8b08..4e93be7806d8 100644 --- a/examples/pylab_examples/finance_demo.py +++ b/examples/pylab_examples/finance_demo.py @@ -19,9 +19,8 @@ if len(quotes) == 0: raise SystemExit -fig = figure() +fig, ax = subplots() fig.subplots_adjust(bottom=0.2) -ax = fig.add_subplot(111) ax.xaxis.set_major_locator(mondays) ax.xaxis.set_minor_locator(alldays) ax.xaxis.set_major_formatter(weekFormatter) diff --git a/examples/pylab_examples/findobj_demo.py b/examples/pylab_examples/findobj_demo.py index 73e61f783bd3..0fd96f1dd824 100644 --- a/examples/pylab_examples/findobj_demo.py +++ b/examples/pylab_examples/findobj_demo.py @@ -10,8 +10,7 @@ c = np.exp(a) d = c[::-1] -fig = plt.figure() -ax = fig.add_subplot(111) +fig, ax = plt.subplots() plt.plot(a,c,'k--',a,d,'k:',a,c+d,'k') plt.legend(('Model length', 'Data length', 'Total message length'), 'upper center', shadow=True) diff --git a/examples/pylab_examples/hist_colormapped.py b/examples/pylab_examples/hist_colormapped.py index cce35e889fdc..7c4451584206 100644 --- a/examples/pylab_examples/hist_colormapped.py +++ b/examples/pylab_examples/hist_colormapped.py @@ -3,8 +3,7 @@ import matplotlib.cm as cm import matplotlib.colors as colors -fig = figure() -ax = fig.add_subplot(111) +fig, ax = plt.subplots() Ntotal = 1000 N, bins, patches = ax.hist(n.random.rand(Ntotal), 20) diff --git a/examples/pylab_examples/interp_demo.py b/examples/pylab_examples/interp_demo.py index 0f7375475d18..911781f07d3d 100644 --- a/examples/pylab_examples/interp_demo.py +++ b/examples/pylab_examples/interp_demo.py @@ -1,4 +1,4 @@ -from matplotlib.pyplot import figure, show +import matplotlib.pyplot as plt from numpy import pi, sin, linspace from matplotlib.mlab import stineman_interp @@ -7,8 +7,7 @@ xi = linspace(x[0],x[-1],100); yi = stineman_interp(xi,x,y,yp); -fig = figure() -ax = fig.add_subplot(111) +fig, ax = plt.subplots() ax.plot(x,y,'ro',xi,yi,'-b.') -show() +plt.show() diff --git a/examples/pylab_examples/legend_demo.py b/examples/pylab_examples/legend_demo.py index 63f25a46bb26..fefc97ea7937 100644 --- a/examples/pylab_examples/legend_demo.py +++ b/examples/pylab_examples/legend_demo.py @@ -30,7 +30,7 @@ legend = ax.legend(loc='upper center', shadow=True) # The frame is matplotlib.patches.Rectangle instance surrounding the legend. -frame = legend.get_frame() +frame = legend.get_frame() frame.set_facecolor('0.90') # Set the fontsize diff --git a/examples/pylab_examples/major_minor_demo1.py b/examples/pylab_examples/major_minor_demo1.py index 81090b065d7a..09c9e25f5a6a 100644 --- a/examples/pylab_examples/major_minor_demo1.py +++ b/examples/pylab_examples/major_minor_demo1.py @@ -41,7 +41,7 @@ t = arange(0.0, 100.0, 0.1) s = sin(0.1*pi*t)*exp(-t*0.01) -ax = subplot(111) +fig, ax = plt.subplots() plot(t,s) ax.xaxis.set_major_locator(majorLocator) diff --git a/examples/pylab_examples/major_minor_demo2.py b/examples/pylab_examples/major_minor_demo2.py index eaeed688ac86..bb0a2633faca 100644 --- a/examples/pylab_examples/major_minor_demo2.py +++ b/examples/pylab_examples/major_minor_demo2.py @@ -22,7 +22,7 @@ t = np.arange(0.0, 100.0, 0.01) s = np.sin(2*np.pi*t)*np.exp(-t*0.01) -ax = plt.subplot(111) +fig, ax = plt.subplots() plt.plot(t,s) ax.xaxis.set_minor_locator(minorLocator) diff --git a/examples/pylab_examples/movie_demo.py b/examples/pylab_examples/movie_demo.py index 7748c3b53d61..9534fb3a2e96 100755 --- a/examples/pylab_examples/movie_demo.py +++ b/examples/pylab_examples/movie_demo.py @@ -3,12 +3,12 @@ from __future__ import print_function -import os, sys +import os from pylab import * files = [] -figure(figsize=(5,5)) -ax = subplot(111) + +fig, ax = plt.subplots(figsize=(5,5)) for i in range(50): # 50 frames cla() imshow(rand(5,5), interpolation='nearest') diff --git a/examples/pylab_examples/multiple_yaxis_with_spines.py b/examples/pylab_examples/multiple_yaxis_with_spines.py index a0051246b202..3b13b770feff 100644 --- a/examples/pylab_examples/multiple_yaxis_with_spines.py +++ b/examples/pylab_examples/multiple_yaxis_with_spines.py @@ -6,10 +6,9 @@ def make_patch_spines_invisible(ax): for sp in ax.spines.itervalues(): sp.set_visible(False) -fig = plt.figure() +fig, host = plt.subplots() fig.subplots_adjust(right=0.75) -host = fig.add_subplot(111) par1 = host.twinx() par2 = host.twinx() diff --git a/examples/pylab_examples/scatter_custom_symbol.py b/examples/pylab_examples/scatter_custom_symbol.py index 602e2a97d2f9..d26499570d08 100644 --- a/examples/pylab_examples/scatter_custom_symbol.py +++ b/examples/pylab_examples/scatter_custom_symbol.py @@ -11,8 +11,7 @@ x,y,s,c = rand(4, 30) s*= 10**2. -fig = figure() -ax = fig.add_subplot(111) +fig, ax = plt.subplots() ax.scatter(x,y,s,c,marker=None,verts =verts) show() diff --git a/examples/pylab_examples/scatter_demo2.py b/examples/pylab_examples/scatter_demo2.py index 6eb9e18a192f..a6ad75ffbdad 100644 --- a/examples/pylab_examples/scatter_demo2.py +++ b/examples/pylab_examples/scatter_demo2.py @@ -30,6 +30,3 @@ fig.tight_layout() plt.show() - - - diff --git a/examples/pylab_examples/stackplot_demo.py b/examples/pylab_examples/stackplot_demo.py index 0148dd8430a9..63eafc15a500 100644 --- a/examples/pylab_examples/stackplot_demo.py +++ b/examples/pylab_examples/stackplot_demo.py @@ -7,12 +7,10 @@ y1, y2, y3 = fnx(), fnx(), fnx() -fig = plt.figure() -ax = fig.add_subplot(111) +fig, ax = plt.subplots() ax.stackplot(x, y) plt.show() -fig = plt.figure() -ax = fig.add_subplot(111) +fig, ax = plt.subplots() ax.stackplot(x, y1, y2, y3) plt.show() diff --git a/examples/pylab_examples/stock_demo.py b/examples/pylab_examples/stock_demo.py index 6c2aec82d709..4891c9310711 100644 --- a/examples/pylab_examples/stock_demo.py +++ b/examples/pylab_examples/stock_demo.py @@ -6,7 +6,7 @@ d1, p1, d2, p2 = get_two_stock_data() -ax = subplot(111) +fig, ax = plt.subplots() lines = plot(d1, p1, 'bs', d2, p2, 'go') xlabel('Days') ylabel('Normalized price') diff --git a/examples/pylab_examples/system_monitor.py b/examples/pylab_examples/system_monitor.py index 4a20679a0e27..76b0b965f0c6 100644 --- a/examples/pylab_examples/system_monitor.py +++ b/examples/pylab_examples/system_monitor.py @@ -22,8 +22,7 @@ def get_stats(): # interactive mode, you'll need to use a GUI event handler/timer. ion() -fig = figure(1) -ax = subplot(111) +fig, ax = plt.subplots() ind = arange(1,4) pm, pc, pn = bar(ind, get_stats()) centers = ind + 0.5*pm.get_width() diff --git a/examples/pylab_examples/text_handles.py b/examples/pylab_examples/text_handles.py index bd4bb2d0b9ca..2a1a21fae8e0 100644 --- a/examples/pylab_examples/text_handles.py +++ b/examples/pylab_examples/text_handles.py @@ -17,7 +17,7 @@ def f(t): t2 = arange(0.0, 5.0, 0.02) -subplot(111) +fig, ax = plt.subplots() plot(t1, f(t1), 'bo', t2, f(t2), 'k') text(3.0, 0.6, 'f(t) = exp(-t) sin(2 pi t)') ttext = title('Fun with text!') diff --git a/examples/units/annotate_with_units.py b/examples/units/annotate_with_units.py index deb06f378295..19a99c3b2187 100644 --- a/examples/units/annotate_with_units.py +++ b/examples/units/annotate_with_units.py @@ -1,9 +1,7 @@ import matplotlib.pyplot as plt from basic_units import cm -fig = plt.figure() -ax = fig.add_subplot(111) - +fig, ax = plt.subplots() ax.annotate( "Note 01", [0.5*cm, 0.5*cm] ) diff --git a/examples/units/artist_tests.py b/examples/units/artist_tests.py index aa88496085f5..c861aaaad5ca 100644 --- a/examples/units/artist_tests.py +++ b/examples/units/artist_tests.py @@ -15,10 +15,9 @@ from basic_units import cm, inch import numpy as np -from matplotlib.pyplot import figure, show +import matplotlib.pyplot as plt -fig = figure() -ax = fig.add_subplot(111) +fig, ax = plt.subplots() ax.xaxis.set_units(cm) ax.yaxis.set_units(cm) @@ -51,5 +50,5 @@ #ax.xaxis.set_units(inch) ax.grid(True) ax.set_title("Artists with units") -show() +plt.show() diff --git a/examples/units/bar_unit_demo.py b/examples/units/bar_unit_demo.py index 9d5a1175cd46..f7f7715cde2a 100644 --- a/examples/units/bar_unit_demo.py +++ b/examples/units/bar_unit_demo.py @@ -8,8 +8,7 @@ menMeans = (150*cm, 160*cm, 146*cm, 172*cm, 155*cm) menStd = ( 20*cm, 30*cm, 32*cm, 10*cm, 20*cm) -fig = plt.figure() -ax = fig.add_subplot(111) +fig, ax = plt.subplots() ind = np.arange(N) # the x locations for the groups width = 0.35 # the width of the bars diff --git a/examples/user_interfaces/lineprops_dialog_gtk.py b/examples/user_interfaces/lineprops_dialog_gtk.py index f7c86b47c5df..828120249b97 100644 --- a/examples/user_interfaces/lineprops_dialog_gtk.py +++ b/examples/user_interfaces/lineprops_dialog_gtk.py @@ -14,8 +14,7 @@ def f(t): t2 = np.arange(0.0, 5.0, 0.02) t3 = np.arange(0.0, 2.0, 0.01) -fig = plt.figure() -ax = fig.add_subplot(111) +fig, ax = plt.subplots() l1, = ax.plot(t1, f(t1), 'bo', label='line 1') l2, = ax.plot(t2, f(t2), 'k--', label='line 2') diff --git a/examples/user_interfaces/pylab_with_gtk.py b/examples/user_interfaces/pylab_with_gtk.py index 4aca382ffe3c..7f89334378be 100644 --- a/examples/user_interfaces/pylab_with_gtk.py +++ b/examples/user_interfaces/pylab_with_gtk.py @@ -8,7 +8,7 @@ import matplotlib.pyplot as plt -ax = plt.subplot(111) +fig, ax = plt.subplots() plt.plot([1,2,3], 'ro-', label='easy as 1 2 3') plt.plot([1,4,9], 'gs--', label='easy as 1 2 3 squared') plt.legend() diff --git a/examples/user_interfaces/svg_tooltip.py b/examples/user_interfaces/svg_tooltip.py index 15a435c1fe7f..6ec48307b4ab 100644 --- a/examples/user_interfaces/svg_tooltip.py +++ b/examples/user_interfaces/svg_tooltip.py @@ -28,8 +28,7 @@ ET.register_namespace("","http://www.w3.org/2000/svg") -fig = plt.figure() -ax = fig.add_subplot(111) +fig, ax = plt.subplots() # Create patches to which tooltips will be assigned. circle = plt.Circle((0,0), 5, fc='blue') diff --git a/examples/widgets/buttons.py b/examples/widgets/buttons.py index 6c3d68423f24..d5695e6b9436 100644 --- a/examples/widgets/buttons.py +++ b/examples/widgets/buttons.py @@ -5,7 +5,7 @@ freqs = np.arange(2, 20, 3) -ax = plt.subplot(111) +fig, ax = plt.subplots() plt.subplots_adjust(bottom=0.2) t = np.arange(0.0, 1.0, 0.001) s = np.sin(2*np.pi*freqs[0]*t) diff --git a/examples/widgets/check_buttons.py b/examples/widgets/check_buttons.py index 2ef55709cf0c..843bad9abd19 100644 --- a/examples/widgets/check_buttons.py +++ b/examples/widgets/check_buttons.py @@ -7,7 +7,7 @@ s1 = np.sin(4*np.pi*t) s2 = np.sin(6*np.pi*t) -ax = plt.subplot(111) +fig, ax = plt.subplots() l0, = ax.plot(t, s0, visible=False, lw=2) l1, = ax.plot(t, s1, lw=2) l2, = ax.plot(t, s2, lw=2) diff --git a/examples/widgets/radio_buttons.py b/examples/widgets/radio_buttons.py index 8d4f32c3d03a..43c5e986b2d2 100644 --- a/examples/widgets/radio_buttons.py +++ b/examples/widgets/radio_buttons.py @@ -7,7 +7,7 @@ s1 = np.sin(4*np.pi*t) s2 = np.sin(8*np.pi*t) -ax = plt.subplot(111) +fig, ax = plt.subplots() l, = ax.plot(t, s0, lw=2, color='red') plt.subplots_adjust(left=0.3) diff --git a/examples/widgets/rectangle_selector.py b/examples/widgets/rectangle_selector.py index ed3d2eacbb5f..fa21a30d23df 100644 --- a/examples/widgets/rectangle_selector.py +++ b/examples/widgets/rectangle_selector.py @@ -29,7 +29,7 @@ def toggle_selector(event): toggle_selector.RS.set_active(True) -current_ax = plt.subplot(111) # make a new plotingrange +fig, current_ax = plt.subplots() # make a new plotingrange N = 100000 # If N is large one can see x = np.linspace(0.0, 10.0, N) # improvement by use blitting! diff --git a/examples/widgets/slider_demo.py b/examples/widgets/slider_demo.py index 04c222a5673f..c75cf92681af 100644 --- a/examples/widgets/slider_demo.py +++ b/examples/widgets/slider_demo.py @@ -2,8 +2,7 @@ import matplotlib.pyplot as plt from matplotlib.widgets import Slider, Button, RadioButtons -fig = plt.figure() -ax = fig.add_subplot(111) +fig, ax = plt.subplots() plt.subplots_adjust(left=0.25, bottom=0.25) t = np.arange(0.0, 1.0, 0.001) a0 = 5 diff --git a/lib/matplotlib/pylab.py b/lib/matplotlib/pylab.py index 5de759bbaaca..bf8b97ba5eb7 100644 --- a/lib/matplotlib/pylab.py +++ b/lib/matplotlib/pylab.py @@ -83,7 +83,8 @@ specgram - a spectrogram plot spy - plot sparsity pattern using markers or image stem - make a stem plot - subplot - make a subplot (nrows, ncols, plot_number) + subplot - make one subplot (numrows, numcols, axesnum) + subplots - make a figure with a set of (numrows, numcols) subplots subplots_adjust - change the params controlling the subplot positions of current figure subplot_tool - launch the subplot configuration tool suptitle - add a figure title From 8d1ee03c70eb5c1609b63e6301f9dd03e211188a Mon Sep 17 00:00:00 2001 From: Paul Ivanov Date: Thu, 8 Nov 2012 10:20:51 -0800 Subject: [PATCH 08/11] revert to OO interface (no pyplot) in OO example --- examples/api/agg_oo.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/examples/api/agg_oo.py b/examples/api/agg_oo.py index 1a5859b4b757..94acbc119a32 100644 --- a/examples/api/agg_oo.py +++ b/examples/api/agg_oo.py @@ -6,10 +6,12 @@ from matplotlib.backends.backend_agg import FigureCanvasAgg as FigureCanvas from matplotlib.figure import Figure -fig, ax = plt.subplots() +fig = Figure() +canvas = FigureCanvas(fig) +ax = fig.add_subplot(111) ax.plot([1,2,3]) ax.set_title('hi mom') ax.grid(True) ax.set_xlabel('time') ax.set_ylabel('volts') -fig.canvas.print_figure('test') +canvas.print_figure('test') From 376a0b4a54c471391ab5b398861203f4b47b61ec Mon Sep 17 00:00:00 2001 From: Paul Ivanov Date: Sat, 10 Nov 2012 01:27:42 -0800 Subject: [PATCH 09/11] more `subplots`, cleanup of old `import *` style --- .../animation/old_animation/animation_blit_tk.py | 2 +- .../animation/old_animation/animation_blit_wx.py | 1 + .../animation/old_animation/histogram_tkagg.py | 1 - .../animation/old_animation/simple_idle_wx.py | 1 - .../animation/old_animation/simple_timer_wx.py | 1 - .../animation/old_animation/strip_chart_demo.py | 5 ++--- examples/animation/strip_chart_demo.py | 1 - examples/api/joinstyle.py | 1 - examples/api/quad_bezier.py | 1 - examples/api/watermark_image.py | 1 - examples/event_handling/path_editor.py | 2 +- examples/pylab_examples/agg_buffer_to_array.py | 7 +++---- examples/pylab_examples/barchart_demo2.py | 1 - examples/pylab_examples/boxplot_demo3.py | 1 - examples/pylab_examples/centered_ticklabels.py | 2 -- examples/pylab_examples/coords_report.py | 2 +- examples/pylab_examples/cursor_demo.py | 2 +- examples/pylab_examples/custom_ticker1.py | 11 ++++++----- examples/pylab_examples/dashpointlabel.py | 4 ++-- examples/pylab_examples/date_demo1.py | 4 ++-- examples/pylab_examples/date_demo2.py | 4 ++-- examples/pylab_examples/date_demo_convert.py | 4 ++-- examples/pylab_examples/date_demo_rrule.py | 11 ++++++----- examples/pylab_examples/date_index_formatter.py | 4 ++-- examples/pylab_examples/fill_between_demo.py | 16 ++++------------ examples/pylab_examples/finance_demo.py | 8 ++++---- examples/pylab_examples/hist_colormapped.py | 8 ++++---- examples/pylab_examples/major_minor_demo1.py | 11 ++++++----- examples/pylab_examples/movie_demo.py | 9 +++++---- examples/pylab_examples/scatter_custom_symbol.py | 6 +++--- examples/pylab_examples/stock_demo.py | 2 +- examples/units/artist_tests.py | 1 - 32 files changed, 59 insertions(+), 76 deletions(-) diff --git a/examples/animation/old_animation/animation_blit_tk.py b/examples/animation/old_animation/animation_blit_tk.py index 0a83e1c75198..19779aba4a15 100644 --- a/examples/animation/old_animation/animation_blit_tk.py +++ b/examples/animation/old_animation/animation_blit_tk.py @@ -12,7 +12,7 @@ import time fig, ax = plt.subplots() -canvas = ax.figure.canvas +canvas = fig.canvas # create the initial line diff --git a/examples/animation/old_animation/animation_blit_wx.py b/examples/animation/old_animation/animation_blit_wx.py index 6071581b31b3..904198c6ae93 100644 --- a/examples/animation/old_animation/animation_blit_wx.py +++ b/examples/animation/old_animation/animation_blit_wx.py @@ -10,6 +10,7 @@ import matplotlib matplotlib.use('WXAgg') matplotlib.rcParams['toolbar'] = 'None' +import matplotlib.pyplot as plt import wx import sys diff --git a/examples/animation/old_animation/histogram_tkagg.py b/examples/animation/old_animation/histogram_tkagg.py index 8236ac0b5e83..ff37fc48bc7d 100644 --- a/examples/animation/old_animation/histogram_tkagg.py +++ b/examples/animation/old_animation/histogram_tkagg.py @@ -2,7 +2,6 @@ This example shows how to use a path patch to draw a bunch of rectangles for an animated histogram """ -import time import numpy as np import matplotlib matplotlib.use('TkAgg') # do this before importing pylab diff --git a/examples/animation/old_animation/simple_idle_wx.py b/examples/animation/old_animation/simple_idle_wx.py index 0612ee6fd3a0..16541597623b 100644 --- a/examples/animation/old_animation/simple_idle_wx.py +++ b/examples/animation/old_animation/simple_idle_wx.py @@ -2,7 +2,6 @@ A simple example of an animated plot using a wx backend """ from __future__ import print_function -import time import numpy as np import matplotlib matplotlib.use('WXAgg') # do this before importing pylab diff --git a/examples/animation/old_animation/simple_timer_wx.py b/examples/animation/old_animation/simple_timer_wx.py index a5b6f96acb98..a427524effd6 100644 --- a/examples/animation/old_animation/simple_timer_wx.py +++ b/examples/animation/old_animation/simple_timer_wx.py @@ -2,7 +2,6 @@ """ A simple example of an animated plot using a wx backend """ -import time import numpy as np import matplotlib matplotlib.use('WXAgg') # do this before importing pylab diff --git a/examples/animation/old_animation/strip_chart_demo.py b/examples/animation/old_animation/strip_chart_demo.py index 2362c8cb4f65..7f659afd020e 100644 --- a/examples/animation/old_animation/strip_chart_demo.py +++ b/examples/animation/old_animation/strip_chart_demo.py @@ -13,6 +13,7 @@ import matplotlib matplotlib.use('GTKAgg') import numpy as np +import matplotlib.pyplot as plt from matplotlib.lines import Line2D @@ -62,10 +63,8 @@ def update(self, *args): return True -from pylab import figure, show - fig, ax = plt.subplots() scope = Scope(ax) gobject.idle_add(scope.update) -show() +plt.show() diff --git a/examples/animation/strip_chart_demo.py b/examples/animation/strip_chart_demo.py index 33ff9d430d0e..2ca94cf5a1ac 100644 --- a/examples/animation/strip_chart_demo.py +++ b/examples/animation/strip_chart_demo.py @@ -2,7 +2,6 @@ Emulate an oscilloscope. Requires the animation API introduced in matplotlib 1.0 SVN. """ -import matplotlib import numpy as np from matplotlib.lines import Line2D import matplotlib.pyplot as plt diff --git a/examples/api/joinstyle.py b/examples/api/joinstyle.py index 0693c7c3e437..ce3847da79f9 100644 --- a/examples/api/joinstyle.py +++ b/examples/api/joinstyle.py @@ -4,7 +4,6 @@ """ import numpy as np -import matplotlib import matplotlib.pyplot as plt def plot_angle(ax, x, y, angle, style): diff --git a/examples/api/quad_bezier.py b/examples/api/quad_bezier.py index 5bf28b94586b..07e85d479e3c 100644 --- a/examples/api/quad_bezier.py +++ b/examples/api/quad_bezier.py @@ -1,4 +1,3 @@ -import numpy as np import matplotlib.path as mpath import matplotlib.patches as mpatches import matplotlib.pyplot as plt diff --git a/examples/api/watermark_image.py b/examples/api/watermark_image.py index fcfaae00abd3..9b6425070ea5 100644 --- a/examples/api/watermark_image.py +++ b/examples/api/watermark_image.py @@ -3,7 +3,6 @@ """ from __future__ import print_function import numpy as np -import matplotlib import matplotlib.cbook as cbook import matplotlib.image as image import matplotlib.pyplot as plt diff --git a/examples/event_handling/path_editor.py b/examples/event_handling/path_editor.py index 7fb82dff50a2..a7458efdea1f 100644 --- a/examples/event_handling/path_editor.py +++ b/examples/event_handling/path_editor.py @@ -71,7 +71,7 @@ def pathpatch_changed(self, pathpatch): 'this method is called whenever the pathpatchgon object is called' # only copy the artist props to the line (except visibility) vis = self.line.get_visible() - Artist.update_from(self.line, pathpatch) + plt.Artist.update_from(self.line, pathpatch) self.line.set_visible(vis) # don't use the pathpatch visibility state diff --git a/examples/pylab_examples/agg_buffer_to_array.py b/examples/pylab_examples/agg_buffer_to_array.py index 11f7f0caaeec..a52434b282ff 100644 --- a/examples/pylab_examples/agg_buffer_to_array.py +++ b/examples/pylab_examples/agg_buffer_to_array.py @@ -1,5 +1,4 @@ -import matplotlib -from pylab import figure, show +import matplotlib.pyplot as plt import numpy as np # make an agg figure @@ -17,7 +16,7 @@ X.shape = h,w,4 # now display the array X as an Axes in a new figure -fig2 = figure() +fig2 = plt.figure() ax2 = fig2.add_subplot(111, frameon=False) ax2.imshow(X) -show() +plt.show() diff --git a/examples/pylab_examples/barchart_demo2.py b/examples/pylab_examples/barchart_demo2.py index 391cd168c9d7..54681c888ee6 100644 --- a/examples/pylab_examples/barchart_demo2.py +++ b/examples/pylab_examples/barchart_demo2.py @@ -11,7 +11,6 @@ import numpy as np import matplotlib.pyplot as plt import pylab -from matplotlib.patches import Polygon from matplotlib.ticker import MaxNLocator diff --git a/examples/pylab_examples/boxplot_demo3.py b/examples/pylab_examples/boxplot_demo3.py index 42e39d8007df..98883c6f1bc8 100644 --- a/examples/pylab_examples/boxplot_demo3.py +++ b/examples/pylab_examples/boxplot_demo3.py @@ -1,5 +1,4 @@ import matplotlib.pyplot as plt -import matplotlib.transforms as mtransforms import numpy as np def fakeBootStrapper(n): diff --git a/examples/pylab_examples/centered_ticklabels.py b/examples/pylab_examples/centered_ticklabels.py index 2063a3ea665f..ba496dde7955 100644 --- a/examples/pylab_examples/centered_ticklabels.py +++ b/examples/pylab_examples/centered_ticklabels.py @@ -12,9 +12,7 @@ # between the major ticks. Here is an example that labels the months, # centered between the ticks -import datetime import numpy as np -import matplotlib import matplotlib.cbook as cbook import matplotlib.dates as dates import matplotlib.ticker as ticker diff --git a/examples/pylab_examples/coords_report.py b/examples/pylab_examples/coords_report.py index f2fc9a40d266..44e72237869a 100644 --- a/examples/pylab_examples/coords_report.py +++ b/examples/pylab_examples/coords_report.py @@ -10,7 +10,7 @@ def millions(x): x = rand(20) y = 1e7*rand(20) -fig, ax = plt.subplots() +fig, ax = subplots() ax.fmt_ydata = millions plot(x, y, 'o') diff --git a/examples/pylab_examples/cursor_demo.py b/examples/pylab_examples/cursor_demo.py index 02dc69284e25..834d52201ea1 100755 --- a/examples/pylab_examples/cursor_demo.py +++ b/examples/pylab_examples/cursor_demo.py @@ -68,7 +68,7 @@ def mouse_move(self, event): t = arange(0.0, 1.0, 0.01) s = sin(2*2*pi*t) -fig, ax = plt.subplots() +fig, ax = subplots() cursor = Cursor(ax) #cursor = SnaptoCursor(ax, t, s) diff --git a/examples/pylab_examples/custom_ticker1.py b/examples/pylab_examples/custom_ticker1.py index 364b12c96c71..91559a05387c 100755 --- a/examples/pylab_examples/custom_ticker1.py +++ b/examples/pylab_examples/custom_ticker1.py @@ -11,9 +11,10 @@ millions of dollars on the y axis """ from matplotlib.ticker import FuncFormatter -from pylab import * +import matplotlib.pyplot as plt +import numpy as np -x = arange(4) +x = np.arange(4) money = [1.5e5, 2.5e6, 5.5e6, 2.0e7] def millions(x, pos): @@ -24,6 +25,6 @@ def millions(x, pos): fig, ax = plt.subplots() ax.yaxis.set_major_formatter(formatter) -bar(x, money) -xticks( x + 0.5, ('Bill', 'Fred', 'Mary', 'Sue') ) -show() +plt.bar(x, money) +plt.xticks( x + 0.5, ('Bill', 'Fred', 'Mary', 'Sue') ) +plt.show() diff --git a/examples/pylab_examples/dashpointlabel.py b/examples/pylab_examples/dashpointlabel.py index 248de6f82b43..7a1ab43bb9f8 100644 --- a/examples/pylab_examples/dashpointlabel.py +++ b/examples/pylab_examples/dashpointlabel.py @@ -1,4 +1,4 @@ -import pylab +import matplotlib.pyplot as plt DATA = ((1, 3), (2, 4), @@ -34,5 +34,5 @@ ax.set_xlim((0.0, 5.0)) ax.set_ylim((0.0, 5.0)) -pylab.show() +plt.show() diff --git a/examples/pylab_examples/date_demo1.py b/examples/pylab_examples/date_demo1.py index 1a26d66fd6d3..51b852a4951e 100644 --- a/examples/pylab_examples/date_demo1.py +++ b/examples/pylab_examples/date_demo1.py @@ -14,7 +14,7 @@ yahoo finance to get the data for plotting """ -from pylab import figure, show +import matplotlib.pyplot as plt from matplotlib.finance import quotes_historical_yahoo from matplotlib.dates import YearLocator, MonthLocator, DateFormatter import datetime @@ -49,4 +49,4 @@ def price(x): return '$%1.2f'%x ax.grid(True) fig.autofmt_xdate() -show() +plt.show() diff --git a/examples/pylab_examples/date_demo2.py b/examples/pylab_examples/date_demo2.py index 8fc86e90ce8c..d6420f97674c 100755 --- a/examples/pylab_examples/date_demo2.py +++ b/examples/pylab_examples/date_demo2.py @@ -7,7 +7,7 @@ """ from __future__ import print_function import datetime -from pylab import figure, show +import matplotlib.pyplot as plt from matplotlib.dates import MONDAY from matplotlib.finance import quotes_historical_yahoo from matplotlib.dates import MonthLocator, WeekdayLocator, DateFormatter @@ -44,4 +44,4 @@ fig.autofmt_xdate() -show() +plt.show() diff --git a/examples/pylab_examples/date_demo_convert.py b/examples/pylab_examples/date_demo_convert.py index 36af442ed1ac..7ccb7c6f649d 100644 --- a/examples/pylab_examples/date_demo_convert.py +++ b/examples/pylab_examples/date_demo_convert.py @@ -1,7 +1,7 @@ #!/usr/bin/env python import datetime -from matplotlib.pyplot import figure, show +import matplotlib.pyplot as plt from matplotlib.dates import DayLocator, HourLocator, DateFormatter, drange from numpy import arange @@ -30,4 +30,4 @@ ax.fmt_xdata = DateFormatter('%Y-%m-%d %H:%M:%S') fig.autofmt_xdate() -show() +plt.show() diff --git a/examples/pylab_examples/date_demo_rrule.py b/examples/pylab_examples/date_demo_rrule.py index c27106deff4f..c8dbef935396 100644 --- a/examples/pylab_examples/date_demo_rrule.py +++ b/examples/pylab_examples/date_demo_rrule.py @@ -5,8 +5,9 @@ See https://moin.conectiva.com.br/DateUtil for help with rrules """ -from pylab import * +import matplotlib.pyplot as plt from matplotlib.dates import YEARLY, DateFormatter, rrulewrapper, RRuleLocator, drange +import numpy as np import datetime # tick every 5th easter @@ -18,14 +19,14 @@ delta = datetime.timedelta(days=100) dates = drange(date1, date2, delta) -s = rand(len(dates)) # make up some random y values +s = np.random.rand(len(dates)) # make up some random y values fig, ax = plt.subplots() -plot_date(dates, s) +plt.plot_date(dates, s) ax.xaxis.set_major_locator(loc) ax.xaxis.set_major_formatter(formatter) labels = ax.get_xticklabels() -setp(labels, rotation=30, fontsize=10) +plt.setp(labels, rotation=30, fontsize=10) -show() +plt.show() diff --git a/examples/pylab_examples/date_index_formatter.py b/examples/pylab_examples/date_index_formatter.py index 6df72b8ef93c..270ee2d319ca 100644 --- a/examples/pylab_examples/date_index_formatter.py +++ b/examples/pylab_examples/date_index_formatter.py @@ -11,7 +11,7 @@ from __future__ import print_function import numpy from matplotlib.mlab import csv2rec -from pylab import figure, show +import matplotlib.pyplot as plt import matplotlib.cbook as cbook from matplotlib.ticker import Formatter @@ -37,4 +37,4 @@ def __call__(self, x, pos=0): ax.xaxis.set_major_formatter(formatter) ax.plot(numpy.arange(len(r)), r.close, 'o-') fig.autofmt_xdate() -show() +plt.show() diff --git a/examples/pylab_examples/fill_between_demo.py b/examples/pylab_examples/fill_between_demo.py index 921f93677659..ebf8d76bb677 100644 --- a/examples/pylab_examples/fill_between_demo.py +++ b/examples/pylab_examples/fill_between_demo.py @@ -1,16 +1,12 @@ #!/usr/bin/env python -import matplotlib.mlab as mlab -from matplotlib.pyplot import figure, show +import matplotlib.pyplot as plt import numpy as np x = np.arange(0.0, 2, 0.01) y1 = np.sin(2*np.pi*x) y2 = 1.2*np.sin(4*np.pi*x) -fig = figure() -ax1 = fig.add_subplot(311) -ax2 = fig.add_subplot(312, sharex=ax1) -ax3 = fig.add_subplot(313, sharex=ax1) +fig, (ax1, ax2, ax3) = plt.subplots(3,1, sharex=True) ax1.fill_between(x, 0, y1) ax1.set_ylabel('between y1 and 0') @@ -26,8 +22,7 @@ # this is different than calling # fill_between(x[where], y1[where],y2[where] # because of edge effects over multiple contiguous regions. -fig = figure() -ax = fig.add_subplot(211) +fig, (ax, ax1) = plt.subplots(2, 1, sharex=True) ax.plot(x, y1, x, y2, color='black') ax.fill_between(x, y1, y2, where=y2>=y1, facecolor='green', interpolate=True) ax.fill_between(x, y1, y2, where=y2<=y1, facecolor='red', interpolate=True) @@ -35,7 +30,6 @@ # Test support for masked arrays. y2 = np.ma.masked_greater(y2, 1.0) -ax1 = fig.add_subplot(212, sharex=ax) ax1.plot(x, y1, x, y2, color='black') ax1.fill_between(x, y1, y2, where=y2>=y1, facecolor='green', interpolate=True) ax1.fill_between(x, y1, y2, where=y2<=y1, facecolor='red', interpolate=True) @@ -61,6 +55,4 @@ ax.fill_between(x, 0, 1, where=y<-theta, facecolor='red', alpha=0.5, transform=trans) - -show() - +plt.show() diff --git a/examples/pylab_examples/finance_demo.py b/examples/pylab_examples/finance_demo.py index 4e93be7806d8..9d0318e2f234 100644 --- a/examples/pylab_examples/finance_demo.py +++ b/examples/pylab_examples/finance_demo.py @@ -1,5 +1,5 @@ #!/usr/bin/env python -from pylab import * +import matplotlib.pyplot as plt from matplotlib.dates import DateFormatter, WeekdayLocator, HourLocator, \ DayLocator, MONDAY from matplotlib.finance import quotes_historical_yahoo, candlestick,\ @@ -19,7 +19,7 @@ if len(quotes) == 0: raise SystemExit -fig, ax = subplots() +fig, ax = plt.subplots() fig.subplots_adjust(bottom=0.2) ax.xaxis.set_major_locator(mondays) ax.xaxis.set_minor_locator(alldays) @@ -31,7 +31,7 @@ ax.xaxis_date() ax.autoscale_view() -setp( gca().get_xticklabels(), rotation=45, horizontalalignment='right') +plt.setp( plt.gca().get_xticklabels(), rotation=45, horizontalalignment='right') -show() +plt.show() diff --git a/examples/pylab_examples/hist_colormapped.py b/examples/pylab_examples/hist_colormapped.py index 7c4451584206..6a5fb69d13ae 100644 --- a/examples/pylab_examples/hist_colormapped.py +++ b/examples/pylab_examples/hist_colormapped.py @@ -1,11 +1,11 @@ -import numpy as n -from pylab import figure, show +import numpy as np +import matplotlib.pyplot as plt import matplotlib.cm as cm import matplotlib.colors as colors fig, ax = plt.subplots() Ntotal = 1000 -N, bins, patches = ax.hist(n.random.rand(Ntotal), 20) +N, bins, patches = ax.hist(np.random.rand(Ntotal), 20) #I'll color code by height, but you could use any scalar @@ -20,4 +20,4 @@ thispatch.set_facecolor(color) -show() +plt.show() diff --git a/examples/pylab_examples/major_minor_demo1.py b/examples/pylab_examples/major_minor_demo1.py index 09c9e25f5a6a..ec9db4673414 100644 --- a/examples/pylab_examples/major_minor_demo1.py +++ b/examples/pylab_examples/major_minor_demo1.py @@ -30,7 +30,8 @@ """ -from pylab import * +import matplotlib.pyplot as plt +import numpy as np from matplotlib.ticker import MultipleLocator, FormatStrFormatter majorLocator = MultipleLocator(20) @@ -38,11 +39,11 @@ minorLocator = MultipleLocator(5) -t = arange(0.0, 100.0, 0.1) -s = sin(0.1*pi*t)*exp(-t*0.01) +t = np.arange(0.0, 100.0, 0.1) +s = np.sin(0.1*np.pi*t)*np.exp(-t*0.01) fig, ax = plt.subplots() -plot(t,s) +plt.plot(t,s) ax.xaxis.set_major_locator(majorLocator) ax.xaxis.set_major_formatter(majorFormatter) @@ -50,4 +51,4 @@ #for the minor ticks, use no labels; default NullFormatter ax.xaxis.set_minor_locator(minorLocator) -show() +plt.show() diff --git a/examples/pylab_examples/movie_demo.py b/examples/pylab_examples/movie_demo.py index 9534fb3a2e96..bb6ce4254f93 100755 --- a/examples/pylab_examples/movie_demo.py +++ b/examples/pylab_examples/movie_demo.py @@ -4,17 +4,18 @@ from __future__ import print_function import os -from pylab import * +import matplotlib.pyplot as plt +import numpy as np files = [] fig, ax = plt.subplots(figsize=(5,5)) for i in range(50): # 50 frames - cla() - imshow(rand(5,5), interpolation='nearest') + plt.cla() + plt.imshow(np.random.rand(5,5), interpolation='nearest') fname = '_tmp%03d.png'%i print('Saving frame', fname) - savefig(fname) + plt.savefig(fname) files.append(fname) print('Making movie animation.mpg - this make take a while') diff --git a/examples/pylab_examples/scatter_custom_symbol.py b/examples/pylab_examples/scatter_custom_symbol.py index d26499570d08..845d5194c8f4 100644 --- a/examples/pylab_examples/scatter_custom_symbol.py +++ b/examples/pylab_examples/scatter_custom_symbol.py @@ -1,5 +1,5 @@ -from matplotlib.pyplot import figure, show -from numpy import arange, pi, cos, sin, pi +import matplotlib.pyplot as plt +from numpy import arange, pi, cos, sin from numpy.random import rand # unit area ellipse @@ -14,4 +14,4 @@ fig, ax = plt.subplots() ax.scatter(x,y,s,c,marker=None,verts =verts) -show() +plt.show() diff --git a/examples/pylab_examples/stock_demo.py b/examples/pylab_examples/stock_demo.py index 4891c9310711..e95b3391ec7c 100644 --- a/examples/pylab_examples/stock_demo.py +++ b/examples/pylab_examples/stock_demo.py @@ -6,7 +6,7 @@ d1, p1, d2, p2 = get_two_stock_data() -fig, ax = plt.subplots() +fig, ax = subplots() lines = plot(d1, p1, 'bs', d2, p2, 'go') xlabel('Days') ylabel('Normalized price') diff --git a/examples/units/artist_tests.py b/examples/units/artist_tests.py index c861aaaad5ca..38a699d208db 100644 --- a/examples/units/artist_tests.py +++ b/examples/units/artist_tests.py @@ -11,7 +11,6 @@ import matplotlib.patches as patches import matplotlib.text as text import matplotlib.collections as collections -import matplotlib.units as units from basic_units import cm, inch import numpy as np From 9a32267deee0b9db97bcec4e81a342827422e774 Mon Sep 17 00:00:00 2001 From: Paul Ivanov Date: Sun, 11 Nov 2012 22:48:11 -0800 Subject: [PATCH 10/11] whats_new: a note about the changed examples --- doc/users/whats_new.rst | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/doc/users/whats_new.rst b/doc/users/whats_new.rst index 33f60d78a4df..1476d84f314d 100644 --- a/doc/users/whats_new.rst +++ b/doc/users/whats_new.rst @@ -138,6 +138,14 @@ Andrew Dawson added a new keyword argument *extendrect* to :meth:`~matplotlib.pyplot.colorbar` to optionally make colorbar extensions rectangular instead of triangular. +Examples now use subplots() +--------------------------- +For the sake of brevity and clarity, most of the :ref:`examples +` now use the newer :func:`~matplotlib.pyplot.subplots` +, which creates a figure and one (or multiple) axes object(s) in one +call. The old way involved a call to :func:`~matplotlib.pyplot.figure`, +followed by one (or multiple) :func:`~matplotlib.pyplot.subplot` calls. + Calling subplot() without arguments ----------------------------------- A call to :func:`~matplotlib.pyplot.subplot` without any arguments now From e4dbbc674964c0b100beaa9cdf68900433e9104f Mon Sep 17 00:00:00 2001 From: Paul Ivanov Date: Mon, 17 Dec 2012 17:11:22 -0800 Subject: [PATCH 11/11] addressing PR feedback --- doc/users/whats_new.rst | 8 ++++---- examples/animation/old_animation/animation_blit_wx.py | 2 +- examples/axes_grid/inset_locator_demo.py | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/doc/users/whats_new.rst b/doc/users/whats_new.rst index 1476d84f314d..7730d1d453fa 100644 --- a/doc/users/whats_new.rst +++ b/doc/users/whats_new.rst @@ -141,10 +141,10 @@ extensions rectangular instead of triangular. Examples now use subplots() --------------------------- For the sake of brevity and clarity, most of the :ref:`examples -` now use the newer :func:`~matplotlib.pyplot.subplots` -, which creates a figure and one (or multiple) axes object(s) in one -call. The old way involved a call to :func:`~matplotlib.pyplot.figure`, -followed by one (or multiple) :func:`~matplotlib.pyplot.subplot` calls. +` now use the newer :func:`~matplotlib.pyplot.subplots`, which +creates a figure and one (or multiple) axes object(s) in one call. The old way +involved a call to :func:`~matplotlib.pyplot.figure`, followed by one (or +multiple) :func:`~matplotlib.pyplot.subplot` calls. Calling subplot() without arguments ----------------------------------- diff --git a/examples/animation/old_animation/animation_blit_wx.py b/examples/animation/old_animation/animation_blit_wx.py index 904198c6ae93..dc7d90c75bc6 100644 --- a/examples/animation/old_animation/animation_blit_wx.py +++ b/examples/animation/old_animation/animation_blit_wx.py @@ -26,7 +26,7 @@ fig, ax = plt.subplots() -canvas = ax.figure.canvas +canvas = fig.canvas p.subplots_adjust(left=0.3, bottom=0.3) # check for flipy bugs diff --git a/examples/axes_grid/inset_locator_demo.py b/examples/axes_grid/inset_locator_demo.py index 78c97da089d5..1a1f5d0e3784 100644 --- a/examples/axes_grid/inset_locator_demo.py +++ b/examples/axes_grid/inset_locator_demo.py @@ -14,7 +14,7 @@ def add_sizebar(ax, size): ax.add_artist(asb) -fig, (ax,ax2) = plt.subplots(1,2, figsize=[5.5, 3]) +fig, (ax, ax2) = plt.subplots(1, 2, figsize=[5.5, 3]) # first subplot ax.set_aspect(1.)