|
From: <lee...@us...> - 2009-12-07 01:17:27
|
Revision: 8010
http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8010&view=rev
Author: leejjoon
Date: 2009-12-07 01:17:16 +0000 (Mon, 07 Dec 2009)
Log Message:
-----------
axes_grid : doc update and new examples
Modified Paths:
--------------
trunk/matplotlib/doc/mpl_toolkits/axes_grid/api/axes_grid_api.rst
trunk/matplotlib/doc/mpl_toolkits/axes_grid/api/index.rst
trunk/matplotlib/doc/mpl_toolkits/axes_grid/users/axislines.rst
trunk/matplotlib/doc/mpl_toolkits/axes_grid/users/overview.rst
Added Paths:
-----------
trunk/matplotlib/doc/mpl_toolkits/axes_grid/api/axis_artist_api.rst
trunk/matplotlib/doc/mpl_toolkits/axes_grid/figures/demo_axis_direction.py
trunk/matplotlib/doc/mpl_toolkits/axes_grid/figures/demo_ticklabel_alignment.py
trunk/matplotlib/doc/mpl_toolkits/axes_grid/figures/demo_ticklabel_direction.py
trunk/matplotlib/examples/axes_grid/demo_curvelinear_grid2.py
trunk/matplotlib/examples/axes_grid/demo_floating_axes.py
Modified: trunk/matplotlib/doc/mpl_toolkits/axes_grid/api/axes_grid_api.rst
===================================================================
--- trunk/matplotlib/doc/mpl_toolkits/axes_grid/api/axes_grid_api.rst 2009-12-07 01:16:44 UTC (rev 8009)
+++ trunk/matplotlib/doc/mpl_toolkits/axes_grid/api/axes_grid_api.rst 2009-12-07 01:17:16 UTC (rev 8010)
@@ -2,6 +2,10 @@
:mod:`mpl_toolkits.axes_grid.axes_grid`
=======================================
-.. autoclass:: mpl_toolkits.axes_grid.axes_grid.AxesGrid
+.. autoclass:: mpl_toolkits.axes_grid.axes_grid.Grid
:members:
:undoc-members:
+
+.. autoclass:: mpl_toolkits.axes_grid.axes_grid.ImageGrid
+ :members:
+ :undoc-members:
Added: trunk/matplotlib/doc/mpl_toolkits/axes_grid/api/axis_artist_api.rst
===================================================================
--- trunk/matplotlib/doc/mpl_toolkits/axes_grid/api/axis_artist_api.rst (rev 0)
+++ trunk/matplotlib/doc/mpl_toolkits/axes_grid/api/axis_artist_api.rst 2009-12-07 01:17:16 UTC (rev 8010)
@@ -0,0 +1,16 @@
+
+:mod:`mpl_toolkits.axes_grid.axis_artist`
+=======================================
+
+.. autoclass:: mpl_toolkits.axes_grid.axis_artist.AxisArtist
+ :members:
+ :undoc-members:
+
+.. autoclass:: mpl_toolkits.axes_grid.axis_artist.Ticks
+ :members:
+
+.. autoclass:: mpl_toolkits.axes_grid.axis_artist.AxisLabel
+ :members:
+
+.. autoclass:: mpl_toolkits.axes_grid.axis_artist.TickLabels
+ :members:
Modified: trunk/matplotlib/doc/mpl_toolkits/axes_grid/api/index.rst
===================================================================
--- trunk/matplotlib/doc/mpl_toolkits/axes_grid/api/index.rst 2009-12-07 01:16:44 UTC (rev 8009)
+++ trunk/matplotlib/doc/mpl_toolkits/axes_grid/api/index.rst 2009-12-07 01:17:16 UTC (rev 8010)
@@ -12,3 +12,4 @@
axes_size_api.rst
axes_divider_api.rst
axes_grid_api.rst
+ axis_artist_api.rst
Added: trunk/matplotlib/doc/mpl_toolkits/axes_grid/figures/demo_axis_direction.py
===================================================================
--- trunk/matplotlib/doc/mpl_toolkits/axes_grid/figures/demo_axis_direction.py (rev 0)
+++ trunk/matplotlib/doc/mpl_toolkits/axes_grid/figures/demo_axis_direction.py 2009-12-07 01:17:16 UTC (rev 8010)
@@ -0,0 +1,98 @@
+
+
+import numpy as np
+import mpl_toolkits.axes_grid.angle_helper as angle_helper
+import mpl_toolkits.axes_grid.grid_finder as grid_finder
+from matplotlib.projections import PolarAxes
+from matplotlib.transforms import Affine2D
+
+import mpl_toolkits.axes_grid.axislines as axislines
+
+from mpl_toolkits.axes_grid.grid_helper_curvelinear import GridHelperCurveLinear
+
+
+def setup_axes(fig, rect):
+ """
+ polar projection, but in a rectangular box.
+ """
+
+ # see demo_curvelinear_grid.py for details
+ tr = Affine2D().scale(np.pi/180., 1.) + PolarAxes.PolarTransform()
+
+ extreme_finder = angle_helper.ExtremeFinderCycle(20, 20,
+ lon_cycle = 360,
+ lat_cycle = None,
+ lon_minmax = None,
+ lat_minmax = (0, np.inf),
+ )
+
+ grid_locator1 = angle_helper.LocatorDMS(12)
+ grid_locator2 = grid_finder.MaxNLocator(5)
+
+ tick_formatter1 = angle_helper.FormatterDMS()
+
+ grid_helper = GridHelperCurveLinear(tr,
+ extreme_finder=extreme_finder,
+ grid_locator1=grid_locator1,
+ grid_locator2=grid_locator2,
+ tick_formatter1=tick_formatter1
+ )
+
+
+ ax1 = axislines.Subplot(fig, rect, grid_helper=grid_helper)
+ ax1.axis[:].toggle(ticklabels=False)
+
+ fig.add_subplot(ax1)
+
+ ax1.set_aspect(1.)
+ ax1.set_xlim(-5, 12)
+ ax1.set_ylim(-5, 10)
+
+ #ax1.grid(True)
+
+ return ax1
+
+
+def add_floating_axis1(ax1):
+ ax1.axis["lat"] = axis = ax1.new_floating_axis(0, 30)
+ axis.label.set_text(r"$\theta = 30^{\circ}$")
+ axis.label.set_visible(True)
+
+ return axis
+
+
+def add_floating_axis2(ax1):
+ ax1.axis["lon"] = axis = ax1.new_floating_axis(1, 6)
+ axis.label.set_text(r"$r = 6$")
+ axis.label.set_visible(True)
+
+ return axis
+
+
+import matplotlib.pyplot as plt
+fig = plt.figure(1, figsize=(8, 4.))
+fig.clf()
+fig.subplots_adjust(left=0.01, right=0.99, bottom=0.01, top=0.99,
+ wspace=0.01, hspace=0.01)
+
+for i, d in enumerate(["bottom", "left", "top", "right"]):
+ ax1 = setup_axes(fig, rect=241++i)
+ axis = add_floating_axis1(ax1)
+ axis.set_axis_direction(d)
+ ax1.annotate(d, (0, 1), (5, -5),
+ xycoords="axes fraction", textcoords="offset points",
+ va="top", ha="left")
+
+for i, d in enumerate(["bottom", "left", "top", "right"]):
+ ax1 = setup_axes(fig, rect=245++i)
+ axis = add_floating_axis2(ax1)
+ axis.set_axis_direction(d)
+ ax1.annotate(d, (0, 1), (5, -5),
+ xycoords="axes fraction", textcoords="offset points",
+ va="top", ha="left")
+
+
+
+plt.show()
+
+
Added: trunk/matplotlib/doc/mpl_toolkits/axes_grid/figures/demo_ticklabel_alignment.py
===================================================================
--- trunk/matplotlib/doc/mpl_toolkits/axes_grid/figures/demo_ticklabel_alignment.py (rev 0)
+++ trunk/matplotlib/doc/mpl_toolkits/axes_grid/figures/demo_ticklabel_alignment.py 2009-12-07 01:17:16 UTC (rev 8010)
@@ -0,0 +1,38 @@
+
+
+import matplotlib.pyplot as plt
+import mpl_toolkits.axes_grid.axislines as axislines
+
+
+def setup_axes(fig, rect):
+
+ ax = axislines.Subplot(fig, rect)
+ fig.add_subplot(ax)
+
+ ax.set_yticks([0.2, 0.8])
+ ax.set_yticklabels(["short", "loooong"])
+ ax.set_xticks([0.2, 0.8])
+ ax.set_xticklabels([r"$\frac{1}{2}\pi$", r"$\pi$"])
+
+ return ax
+
+fig = plt.figure(1, figsize=(3, 5))
+fig.subplots_adjust(left=0.5, hspace=0.7)
+
+
+
+ax = setup_axes(fig, 311)
+ax.set_ylabel("ha=right")
+ax.set_xlabel("va=baseline")
+
+ax = setup_axes(fig, 312)
+ax.axis["left"].major_ticklabels.set_ha("center")
+ax.axis["bottom"].major_ticklabels.set_va("top")
+ax.set_ylabel("ha=center")
+ax.set_xlabel("va=top")
+
+ax = setup_axes(fig, 313)
+ax.axis["left"].major_ticklabels.set_ha("left")
+ax.axis["bottom"].major_ticklabels.set_va("bottom")
+ax.set_ylabel("ha=left")
+ax.set_xlabel("va=bottom")
Added: trunk/matplotlib/doc/mpl_toolkits/axes_grid/figures/demo_ticklabel_direction.py
===================================================================
--- trunk/matplotlib/doc/mpl_toolkits/axes_grid/figures/demo_ticklabel_direction.py (rev 0)
+++ trunk/matplotlib/doc/mpl_toolkits/axes_grid/figures/demo_ticklabel_direction.py 2009-12-07 01:17:16 UTC (rev 8010)
@@ -0,0 +1,52 @@
+
+import matplotlib.pyplot as plt
+import mpl_toolkits.axes_grid.axislines as axislines
+
+
+def setup_axes(fig, rect):
+
+ ax = axislines.Subplot(fig, rect)
+ fig.add_subplot(ax)
+
+ ax.set_yticks([0.2, 0.8])
+ #ax.set_yticklabels(["short", "loooong"])
+ ax.set_xticks([0.2, 0.8])
+ #ax.set_xticklabels([r"$\frac{1}{2}\pi$", r"$\pi$"])
+
+ return ax
+
+fig = plt.figure(1, figsize=(6, 3))
+fig.subplots_adjust(bottom=0.2)
+
+
+
+ax = setup_axes(fig, 131)
+for axis in ax.axis.values(): axis.major_ticks.set_tick_out(True)
+#or you can simply do "ax.axis[:].major_ticks.set_tick_out(True)"
+
+
+
+
+ax = setup_axes(fig, 132)
+ax.axis["left"].set_axis_direction("right")
+ax.axis["bottom"].set_axis_direction("top")
+ax.axis["right"].set_axis_direction("left")
+ax.axis["top"].set_axis_direction("bottom")
+
+ax.axis["left"].major_ticklabels.set_pad(0)
+ax.axis["bottom"].major_ticklabels.set_pad(10)
+
+
+
+ax = setup_axes(fig, 133)
+ax.axis["left"].set_axis_direction("right")
+ax.axis[:].major_ticks.set_tick_out(True)
+
+ax.axis["left"].label.set_text("Long Label Left")
+ax.axis["bottom"].label.set_text("Label Bottom")
+ax.axis["right"].label.set_text("Long Label Right")
+ax.axis["right"].label.set_visible(True)
+ax.axis["left"].label.set_pad(0)
+ax.axis["bottom"].label.set_pad(10)
+
+plt.show()
Modified: trunk/matplotlib/doc/mpl_toolkits/axes_grid/users/axislines.rst
===================================================================
--- trunk/matplotlib/doc/mpl_toolkits/axes_grid/users/axislines.rst 2009-12-07 01:16:44 UTC (rev 8009)
+++ trunk/matplotlib/doc/mpl_toolkits/axes_grid/users/axislines.rst 2009-12-07 01:17:16 UTC (rev 8010)
@@ -42,7 +42,7 @@
axis-related method in mpl may have no effect.
In addition to AxisArtist instances, the axes_grid.axislines.Axes will
have *gridlines* attribute (Gridlines), which obviously draws grid
-lines.
+lines.
In both AxisArtist and Gridlines, the calculation of tick and grid
location is delegated to an instance of GridHelper class.
@@ -119,7 +119,44 @@
ax.axis["left"].major_ticklabels.set_color("r")
+3. To change the attributes of multiple axis::
+ ax.axis["left","bottom"].major_ticklabels.set_color("r")
+
+ or to change the attributes of all axis::
+
+ ax.axis[:].major_ticklabels.set_color("r")
+
+4. To change the tick size (length), you need to use
+ axis.major_ticks.set_ticksize method. To change the direction of
+ the ticks (ticks are in opposite direction of ticklabels by
+ default), use axis.major_ticks.set_tick_out method.
+
+ To change the pad between ticks and ticklabels, use
+ axis.major_ticklabels.set_pad method.
+
+ To change the pad between ticklabels and axis label,
+ axis.label.set_pad method.
+
+Examples
+========
+
+Adjusting axis_direction
+------------------------
+
+.. plot:: mpl_toolkits/axes_grid/figures/demo_axis_direction.py
+
+Adjusting ticklabels alignment
+------------------------------
+
+.. plot:: mpl_toolkits/axes_grid/figures/demo_ticklabel_alignment.py
+
+Adjusting ticklabels pad
+------------------------
+
+.. plot:: mpl_toolkits/axes_grid/figures/demo_ticklabel_direction.py
+
+
GridHelper
==========
@@ -138,7 +175,7 @@
from mpl_toolkits.axes_grid.axislines import Subplot
# from curved coordinate to rectlinear coordinate.
- def tr(x, y):
+ def tr(x, y):
x, y = np.asarray(x), np.asarray(y)
return x, y-x
@@ -171,7 +208,7 @@
# extreme finder : find a range of coordinate.
# 20, 20 : number of sampling points along x, y direction
- # The first coordinate (longitude, but theta in polar)
+ # The first coordinate (longitude, but theta in polar)
# has a cycle of 360 degree.
# The second coordinate (latitude, but radius in polar) has a minimum of 0
extreme_finder = angle_helper.ExtremeFinderCycle(20, 20,
@@ -225,7 +262,7 @@
the resulting AxisArtist is properly added to the axes. A recommended
way is to add it as an item of Axes's axis attribute.::
- # floating axis whose first (index starts from 0) coordinate
+ # floating axis whose first (index starts from 0) coordinate
# (theta) is fixed at 60
ax1.axis["lat"] = axis = ax1.new_floating_axis(0, 60)
Modified: trunk/matplotlib/doc/mpl_toolkits/axes_grid/users/overview.rst
===================================================================
--- trunk/matplotlib/doc/mpl_toolkits/axes_grid/users/overview.rst 2009-12-07 01:16:44 UTC (rev 8009)
+++ trunk/matplotlib/doc/mpl_toolkits/axes_grid/users/overview.rst 2009-12-07 01:17:16 UTC (rev 8010)
@@ -35,7 +35,7 @@
padding between them cannot be easily done in matplotlib. AxesGrid is
used in such case.
-.. plot:: mpl_examples/axes_grid/simple_axesgrid.py
+.. plot:: mpl_toolkits/axes_grid/examples/simple_axesgrid.py
:include-source:
* The postion of each axes is determined at the drawing time (see
@@ -398,3 +398,11 @@
.. plot:: mpl_toolkits/axes_grid/examples/demo_floating_axis.py
+Floating Axes
+=============
+
+An axes whose outer axis are defined as floating axis.
+
+.. plot:: mpl_toolkits/axes_grid/examples/demo_floating_axes.py
+
+
Added: trunk/matplotlib/examples/axes_grid/demo_curvelinear_grid2.py
===================================================================
--- trunk/matplotlib/examples/axes_grid/demo_curvelinear_grid2.py (rev 0)
+++ trunk/matplotlib/examples/axes_grid/demo_curvelinear_grid2.py 2009-12-07 01:17:16 UTC (rev 8010)
@@ -0,0 +1,63 @@
+import numpy as np
+#from matplotlib.path import Path
+
+import matplotlib.pyplot as plt
+
+from mpl_toolkits.axes_grid.grid_helper_curvelinear import GridHelperCurveLinear
+from mpl_toolkits.axes_grid.axislines import Subplot
+
+import mpl_toolkits.axes_grid.angle_helper as angle_helper
+
+def curvelinear_test1(fig):
+ """
+ grid for custom transform.
+ """
+
+ def tr(x, y):
+ sgn = np.sign(x)
+ x, y = np.abs(np.asarray(x)), np.asarray(y)
+ return sgn*x**.5, y
+
+ def inv_tr(x,y):
+ sgn = np.sign(x)
+ x, y = np.asarray(x), np.asarray(y)
+ return sgn*x**2, y
+
+ extreme_finder = angle_helper.ExtremeFinderCycle(20, 20,
+ lon_cycle = None,
+ lat_cycle = None,
+ lon_minmax = None, #(0, np.inf),
+ lat_minmax = None,
+ )
+
+ grid_helper = GridHelperCurveLinear((tr, inv_tr),
+ extreme_finder=extreme_finder)
+
+ ax1 = Subplot(fig, 111, grid_helper=grid_helper)
+ # ax1 will have a ticks and gridlines defined by the given
+ # transform (+ transData of the Axes). Note that the transform of
+ # the Axes itself (i.e., transData) is not affected by the given
+ # transform.
+
+ fig.add_subplot(ax1)
+
+ ax1.imshow(np.arange(25).reshape(5,5),
+ vmax = 50, cmap=plt.cm.gray_r,
+ interpolation="nearest",
+ origin="lower")
+
+ # tick density
+ grid_helper.grid_finder.grid_locator1._nbins = 6
+ grid_helper.grid_finder.grid_locator2._nbins = 6
+
+
+
+if 1:
+ fig = plt.figure(1, figsize=(7, 4))
+ fig.clf()
+
+ curvelinear_test1(fig)
+ plt.show()
+
+
+
Added: trunk/matplotlib/examples/axes_grid/demo_floating_axes.py
===================================================================
--- trunk/matplotlib/examples/axes_grid/demo_floating_axes.py (rev 0)
+++ trunk/matplotlib/examples/axes_grid/demo_floating_axes.py 2009-12-07 01:17:16 UTC (rev 8010)
@@ -0,0 +1,130 @@
+from matplotlib.transforms import Affine2D
+
+from mpl_toolkits.axes_grid.floating_axes import FloatingSubplot,\
+ GridHelperCurveLinear
+
+import numpy as np
+import mpl_toolkits.axes_grid.angle_helper as angle_helper
+from matplotlib.projections import PolarAxes
+from mpl_toolkits.axes_grid.grid_finder import FixedLocator, MaxNLocator, \
+ DictFormatter
+
+def setup_axes1(fig, rect):
+
+ #tr_scale = Affine2D().scale(np.pi/180., 1.)
+
+ tr = PolarAxes.PolarTransform()
+
+ pi = np.pi
+ angle_ticks = [(0, r"$0$"),
+ (.25*pi, r"$\frac{1}{4}\pi$"),
+ (.5*pi, r"$\frac{1}{2}\pi$")]
+ grid_locator1 = FixedLocator([v for v, s in angle_ticks])
+ tick_formatter1 = DictFormatter(dict(angle_ticks))
+
+ grid_locator2 = MaxNLocator(2)
+
+ grid_helper = GridHelperCurveLinear(tr,
+ extremes=(.5*pi, 0, 2, 1),
+ #extremes=(0, .5*pi, 1, 2),
+ #extremes=(0, 1, 1, 2),
+ grid_locator1=grid_locator1,
+ grid_locator2=grid_locator2,
+ tick_formatter1=tick_formatter1,
+ tick_formatter2=None,
+ )
+
+ ax1 = FloatingSubplot(fig, rect, grid_helper=grid_helper)
+ fig.add_subplot(ax1)
+
+ #ax1.axis[:]
+
+ # create a parasite axes whose transData in RA, cz
+ aux_ax = ax1.get_aux_axes(tr)
+
+ aux_ax.patch = ax1.patch # for aux_ax to have a clip path as in ax
+ ax1.patch.zorder=0.9 # but this has a side effect that the patch is
+ # drawn twice, and possibly over some other
+ # artists. So, we decrease the zorder a bit to
+ # prevent this.
+
+ return ax1, aux_ax
+
+
+def setup_axes2(fig, rect):
+
+ # rotate a bit for better orientation
+ tr_rotate = Affine2D().translate(-95, 0)
+
+ # scale degree to radians
+ tr_scale = Affine2D().scale(np.pi/180., 1.)
+
+ tr = tr_rotate + tr_scale + PolarAxes.PolarTransform()
+
+ grid_locator1 = angle_helper.LocatorHMS(4)
+ tick_formatter1 = angle_helper.FormatterHMS()
+
+ grid_locator2 = MaxNLocator(3)
+
+ ra0, ra1 = 8.*15, 14.*15
+ cz0, cz1 = 0, 14000
+ grid_helper = GridHelperCurveLinear(tr,
+ extremes=(ra0, ra1, cz0, cz1),
+ grid_locator1=grid_locator1,
+ grid_locator2=grid_locator2,
+ tick_formatter1=tick_formatter1,
+ tick_formatter2=None,
+ )
+
+ ax1 = FloatingSubplot(fig, rect, grid_helper=grid_helper)
+ fig.add_subplot(ax1)
+
+ # adjust axis
+ ax1.axis["left"].set_axis_direction("bottom")
+ ax1.axis["right"].set_axis_direction("top")
+
+ ax1.axis["bottom"].set_visible(False)
+ ax1.axis["top"].set_axis_direction("bottom")
+ ax1.axis["top"].toggle(ticklabels=True, label=True)
+ ax1.axis["top"].major_ticklabels.set_axis_direction("top")
+ ax1.axis["top"].label.set_axis_direction("top")
+
+ ax1.axis["left"].label.set_text(r"cz [km$^{-1}$]")
+ ax1.axis["top"].label.set_text(r"$\alpha_{1950}$")
+
+
+ # create a parasite axes whose transData in RA, cz
+ aux_ax = ax1.get_aux_axes(tr)
+
+ aux_ax.patch = ax1.patch # for aux_ax to have a clip path as in ax
+ ax1.patch.zorder=0.9 # but this has a side effect that the patch is
+ # drawn twice, and possibly over some other
+ # artists. So, we decrease the zorder a bit to
+ # prevent this.
+
+ return ax1, aux_ax
+
+
+def sixty(d, m, s):
+ return d + (m + s/60.)/60.
+
+
+
+if 1:
+ import matplotlib.pyplot as plt
+ fig = plt.figure(1, figsize=(7, 5))
+
+ ax1, aux_ax1 = setup_axes1(fig, 121)
+
+ theta = np.random.rand(10)*.5*np.pi
+ radius = np.random.rand(10)+1.
+ aux_ax1.scatter(theta, radius)
+
+ ax2, aux_ax2 = setup_axes2(fig, 122)
+
+ theta = (8 + np.random.rand(10)*(14-8))*15. # indegree
+ radius = np.random.rand(10)*14000.
+ aux_ax2.scatter(theta, radius)
+
+ plt.show()
+
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|