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. |