From: <lee...@us...> - 2010-04-20 16:44:08
|
Revision: 8247 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8247&view=rev Author: leejjoon Date: 2010-04-20 16:44:01 +0000 (Tue, 20 Apr 2010) Log Message: ----------- update axes_grid toolkit documentation Modified Paths: -------------- trunk/matplotlib/CHANGELOG trunk/matplotlib/doc/mpl_toolkits/axes_grid/figures/axis_direction_demo_step01.py trunk/matplotlib/doc/mpl_toolkits/axes_grid/figures/axis_direction_demo_step02.py trunk/matplotlib/doc/mpl_toolkits/axes_grid/figures/axis_direction_demo_step03.py trunk/matplotlib/doc/mpl_toolkits/axes_grid/figures/axis_direction_demo_step04.py 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/parasite_simple.py trunk/matplotlib/doc/mpl_toolkits/axes_grid/figures/simple_axis_direction01.py trunk/matplotlib/doc/mpl_toolkits/axes_grid/figures/simple_axis_direction03.py trunk/matplotlib/doc/mpl_toolkits/axes_grid/figures/simple_axis_pad.py trunk/matplotlib/doc/mpl_toolkits/axes_grid/figures/simple_rgb.py trunk/matplotlib/doc/mpl_toolkits/axes_grid/index.rst trunk/matplotlib/doc/mpl_toolkits/axes_grid/users/index.rst trunk/matplotlib/doc/mpl_toolkits/axes_grid/users/overview.rst trunk/matplotlib/examples/axes_grid/demo_curvelinear_grid.py trunk/matplotlib/examples/axes_grid/demo_parasite_axes2.py trunk/matplotlib/examples/axes_grid/scatter_hist.py trunk/matplotlib/examples/axes_grid/simple_axisline4.py Added Paths: ----------- trunk/matplotlib/doc/mpl_toolkits/axes_grid/figures/simple_axisartist1.py trunk/matplotlib/doc/mpl_toolkits/axes_grid/figures/simple_colorbar.py trunk/matplotlib/doc/mpl_toolkits/axes_grid/users/axisartist.rst Removed Paths: ------------- trunk/matplotlib/doc/mpl_toolkits/axes_grid/users/axislines.rst Modified: trunk/matplotlib/CHANGELOG =================================================================== --- trunk/matplotlib/CHANGELOG 2010-04-20 16:43:42 UTC (rev 8246) +++ trunk/matplotlib/CHANGELOG 2010-04-20 16:44:01 UTC (rev 8247) @@ -1,3 +1,5 @@ +2010-04-18 update the axes_grid documentation. -JJL + 2010-04-18 Control MaxNLocator parameters after instantiation, and via Axes.locator_params method, with corresponding pyplot function. -EF Modified: trunk/matplotlib/doc/mpl_toolkits/axes_grid/figures/axis_direction_demo_step01.py =================================================================== --- trunk/matplotlib/doc/mpl_toolkits/axes_grid/figures/axis_direction_demo_step01.py 2010-04-20 16:43:42 UTC (rev 8246) +++ trunk/matplotlib/doc/mpl_toolkits/axes_grid/figures/axis_direction_demo_step01.py 2010-04-20 16:44:01 UTC (rev 8247) @@ -1,8 +1,8 @@ import matplotlib.pyplot as plt -import mpl_toolkits.axes_grid.axislines as axislines +import mpl_toolkits.axisartist as axisartist def setup_axes(fig, rect): - ax = axislines.Subplot(fig, rect) + ax = axisartist.Subplot(fig, rect) fig.add_axes(ax) ax.set_ylim(-0.1, 1.5) Modified: trunk/matplotlib/doc/mpl_toolkits/axes_grid/figures/axis_direction_demo_step02.py =================================================================== --- trunk/matplotlib/doc/mpl_toolkits/axes_grid/figures/axis_direction_demo_step02.py 2010-04-20 16:43:42 UTC (rev 8246) +++ trunk/matplotlib/doc/mpl_toolkits/axes_grid/figures/axis_direction_demo_step02.py 2010-04-20 16:44:01 UTC (rev 8247) @@ -1,8 +1,8 @@ import matplotlib.pyplot as plt -import mpl_toolkits.axes_grid.axislines as axislines +import mpl_toolkits.axisartist as axisartist def setup_axes(fig, rect): - ax = axislines.Subplot(fig, rect) + ax = axisartist.Subplot(fig, rect) fig.add_axes(ax) ax.set_ylim(-0.1, 1.5) Modified: trunk/matplotlib/doc/mpl_toolkits/axes_grid/figures/axis_direction_demo_step03.py =================================================================== --- trunk/matplotlib/doc/mpl_toolkits/axes_grid/figures/axis_direction_demo_step03.py 2010-04-20 16:43:42 UTC (rev 8246) +++ trunk/matplotlib/doc/mpl_toolkits/axes_grid/figures/axis_direction_demo_step03.py 2010-04-20 16:44:01 UTC (rev 8247) @@ -1,8 +1,8 @@ import matplotlib.pyplot as plt -import mpl_toolkits.axes_grid.axislines as axislines +import mpl_toolkits.axisartist as axisartist def setup_axes(fig, rect): - ax = axislines.Subplot(fig, rect) + ax = axisartist.Subplot(fig, rect) fig.add_axes(ax) ax.set_ylim(-0.1, 1.5) Modified: trunk/matplotlib/doc/mpl_toolkits/axes_grid/figures/axis_direction_demo_step04.py =================================================================== --- trunk/matplotlib/doc/mpl_toolkits/axes_grid/figures/axis_direction_demo_step04.py 2010-04-20 16:43:42 UTC (rev 8246) +++ trunk/matplotlib/doc/mpl_toolkits/axes_grid/figures/axis_direction_demo_step04.py 2010-04-20 16:44:01 UTC (rev 8247) @@ -1,8 +1,8 @@ import matplotlib.pyplot as plt -import mpl_toolkits.axes_grid.axislines as axislines +import mpl_toolkits.axisartist as axisartist def setup_axes(fig, rect): - ax = axislines.Subplot(fig, rect) + ax = axisartist.Subplot(fig, rect) fig.add_axes(ax) ax.set_ylim(-0.1, 1.5) Modified: trunk/matplotlib/doc/mpl_toolkits/axes_grid/figures/demo_axis_direction.py =================================================================== --- trunk/matplotlib/doc/mpl_toolkits/axes_grid/figures/demo_axis_direction.py 2010-04-20 16:43:42 UTC (rev 8246) +++ trunk/matplotlib/doc/mpl_toolkits/axes_grid/figures/demo_axis_direction.py 2010-04-20 16:44:01 UTC (rev 8247) @@ -1,14 +1,14 @@ import numpy as np -import mpl_toolkits.axes_grid.angle_helper as angle_helper -import mpl_toolkits.axes_grid.grid_finder as grid_finder +import mpl_toolkits.axisartist.angle_helper as angle_helper +import mpl_toolkits.axisartist.grid_finder as grid_finder from matplotlib.projections import PolarAxes from matplotlib.transforms import Affine2D -import mpl_toolkits.axes_grid.axislines as axislines +import mpl_toolkits.axisartist as axisartist -from mpl_toolkits.axes_grid.grid_helper_curvelinear import GridHelperCurveLinear +from mpl_toolkits.axisartist.grid_helper_curvelinear import GridHelperCurveLinear def setup_axes(fig, rect): @@ -39,7 +39,7 @@ ) - ax1 = axislines.Subplot(fig, rect, grid_helper=grid_helper) + ax1 = axisartist.Subplot(fig, rect, grid_helper=grid_helper) ax1.axis[:].toggle(ticklabels=False) fig.add_subplot(ax1) Modified: trunk/matplotlib/doc/mpl_toolkits/axes_grid/figures/demo_ticklabel_alignment.py =================================================================== --- trunk/matplotlib/doc/mpl_toolkits/axes_grid/figures/demo_ticklabel_alignment.py 2010-04-20 16:43:42 UTC (rev 8246) +++ trunk/matplotlib/doc/mpl_toolkits/axes_grid/figures/demo_ticklabel_alignment.py 2010-04-20 16:44:01 UTC (rev 8247) @@ -1,12 +1,12 @@ import matplotlib.pyplot as plt -import mpl_toolkits.axes_grid.axislines as axislines +import mpl_toolkits.axisartist as axisartist def setup_axes(fig, rect): - ax = axislines.Subplot(fig, rect) + ax = axisartist.Subplot(fig, rect) fig.add_subplot(ax) ax.set_yticks([0.2, 0.8]) Modified: trunk/matplotlib/doc/mpl_toolkits/axes_grid/figures/parasite_simple.py =================================================================== --- trunk/matplotlib/doc/mpl_toolkits/axes_grid/figures/parasite_simple.py 2010-04-20 16:43:42 UTC (rev 8246) +++ trunk/matplotlib/doc/mpl_toolkits/axes_grid/figures/parasite_simple.py 2010-04-20 16:44:01 UTC (rev 8247) @@ -1,11 +1,8 @@ -from mpl_toolkits.axes_grid.parasite_axes import SubplotHost +from mpl_toolkits.axes_grid1 import host_subplot import matplotlib.pyplot as plt -fig = plt.figure(1) +host = host_subplot(111) -host = SubplotHost(fig, 111) -fig.add_subplot(host) - par = host.twinx() host.set_xlabel("Distance") @@ -15,10 +12,13 @@ p1, = host.plot([0, 1, 2], [0, 1, 2], label="Density") p2, = par.plot([0, 1, 2], [0, 3, 2], label="Temperature") -host.axis["left"].label.set_color(p1.get_color()) -par.axis["right"].label.set_color(p2.get_color()) +leg = plt.legend() -host.legend() +host.yaxis.get_label().set_color(p1.get_color()) +leg.texts[0].set_color(p1.get_color()) +par.yaxis.get_label().set_color(p2.get_color()) +leg.texts[1].set_color(p2.get_color()) + plt.show() Modified: trunk/matplotlib/doc/mpl_toolkits/axes_grid/figures/simple_axis_direction01.py =================================================================== --- trunk/matplotlib/doc/mpl_toolkits/axes_grid/figures/simple_axis_direction01.py 2010-04-20 16:43:42 UTC (rev 8246) +++ trunk/matplotlib/doc/mpl_toolkits/axes_grid/figures/simple_axis_direction01.py 2010-04-20 16:44:01 UTC (rev 8247) @@ -1,8 +1,8 @@ import matplotlib.pyplot as plt -import mpl_toolkits.axes_grid.axislines as axislines +import mpl_toolkits.axisartist as axisartist fig = plt.figure(figsize=(4,2.5)) -ax1 = fig.add_subplot(axislines.Subplot(fig, "111")) +ax1 = fig.add_subplot(axisartist.Subplot(fig, "111")) fig.subplots_adjust(right=0.8) ax1.axis["left"].major_ticklabels.set_axis_direction("top") Modified: trunk/matplotlib/doc/mpl_toolkits/axes_grid/figures/simple_axis_direction03.py =================================================================== --- trunk/matplotlib/doc/mpl_toolkits/axes_grid/figures/simple_axis_direction03.py 2010-04-20 16:43:42 UTC (rev 8246) +++ trunk/matplotlib/doc/mpl_toolkits/axes_grid/figures/simple_axis_direction03.py 2010-04-20 16:44:01 UTC (rev 8247) @@ -1,9 +1,9 @@ import matplotlib.pyplot as plt -import mpl_toolkits.axes_grid.axislines as axislines +import mpl_toolkits.axisartist as axisartist def setup_axes(fig, rect): - ax = axislines.Subplot(fig, rect) + ax = axisartist.Subplot(fig, rect) fig.add_subplot(ax) ax.set_yticks([0.2, 0.8]) Modified: trunk/matplotlib/doc/mpl_toolkits/axes_grid/figures/simple_axis_pad.py =================================================================== --- trunk/matplotlib/doc/mpl_toolkits/axes_grid/figures/simple_axis_pad.py 2010-04-20 16:43:42 UTC (rev 8246) +++ trunk/matplotlib/doc/mpl_toolkits/axes_grid/figures/simple_axis_pad.py 2010-04-20 16:44:01 UTC (rev 8247) @@ -1,14 +1,14 @@ import numpy as np -import mpl_toolkits.axes_grid.angle_helper as angle_helper -import mpl_toolkits.axes_grid.grid_finder as grid_finder +import mpl_toolkits.axisartist.angle_helper as angle_helper +import mpl_toolkits.axisartist.grid_finder as grid_finder from matplotlib.projections import PolarAxes from matplotlib.transforms import Affine2D -import mpl_toolkits.axes_grid.axislines as axislines +import mpl_toolkits.axisartist as axisartist -from mpl_toolkits.axes_grid.grid_helper_curvelinear import GridHelperCurveLinear +from mpl_toolkits.axisartist.grid_helper_curvelinear import GridHelperCurveLinear def setup_axes(fig, rect): @@ -39,7 +39,7 @@ ) - ax1 = axislines.Subplot(fig, rect, grid_helper=grid_helper) + ax1 = axisartist.Subplot(fig, rect, grid_helper=grid_helper) #ax1.axis[:].toggle(all=False) ax1.axis[:].set_visible(False) Added: trunk/matplotlib/doc/mpl_toolkits/axes_grid/figures/simple_axisartist1.py =================================================================== --- trunk/matplotlib/doc/mpl_toolkits/axes_grid/figures/simple_axisartist1.py (rev 0) +++ trunk/matplotlib/doc/mpl_toolkits/axes_grid/figures/simple_axisartist1.py 2010-04-20 16:44:01 UTC (rev 8247) @@ -0,0 +1,22 @@ +import matplotlib.pyplot as plt +import mpl_toolkits.axisartist as AA + +fig = plt.figure(1) +fig.subplots_adjust(right=0.85) +ax = AA.Subplot(fig, 1, 1, 1) +fig.add_subplot(ax) + +# make some axis invisible +ax.axis["bottom", "top", "right"].set_visible(False) + +# make an new axis along the first axis axis (x-axis) which pass +# throught y=0. +ax.axis["y=0"] = ax.new_floating_axis(nth_coord=0, value=0, + axis_direction="bottom") +ax.axis["y=0"].toggle(all=True) +ax.axis["y=0"].label.set_text("y = 0") + +ax.set_ylim(-2, 4) + +plt.show() + Added: trunk/matplotlib/doc/mpl_toolkits/axes_grid/figures/simple_colorbar.py =================================================================== --- trunk/matplotlib/doc/mpl_toolkits/axes_grid/figures/simple_colorbar.py (rev 0) +++ trunk/matplotlib/doc/mpl_toolkits/axes_grid/figures/simple_colorbar.py 2010-04-20 16:44:01 UTC (rev 8247) @@ -0,0 +1,14 @@ +import matplotlib.pyplot as plt +from mpl_toolkits.axes_grid1 import make_axes_locatable +import numpy as np + +ax = plt.subplot(111) +im = ax.imshow(np.arange(100).reshape((10,10))) + +# create an axes on the right side of ax. The width of cax will be 5% +# of ax and the padding between cax and ax will be fixed at 0.05 inch. +divider = make_axes_locatable(ax) +cax = divider.append_axes("right", size="5%", pad=0.05) + +plt.colorbar(im, cax=cax) + Modified: trunk/matplotlib/doc/mpl_toolkits/axes_grid/figures/simple_rgb.py =================================================================== --- trunk/matplotlib/doc/mpl_toolkits/axes_grid/figures/simple_rgb.py 2010-04-20 16:43:42 UTC (rev 8246) +++ trunk/matplotlib/doc/mpl_toolkits/axes_grid/figures/simple_rgb.py 2010-04-20 16:44:01 UTC (rev 8247) @@ -1,6 +1,6 @@ import matplotlib.pyplot as plt -from mpl_toolkits.axes_grid.axes_rgb import RGBAxes +from mpl_toolkits.axes_grid1.axes_rgb import RGBAxes def get_demo_image(): import numpy as np Modified: trunk/matplotlib/doc/mpl_toolkits/axes_grid/index.rst =================================================================== --- trunk/matplotlib/doc/mpl_toolkits/axes_grid/index.rst 2010-04-20 16:43:42 UTC (rev 8246) +++ trunk/matplotlib/doc/mpl_toolkits/axes_grid/index.rst 2010-04-20 16:44:01 UTC (rev 8247) @@ -13,13 +13,30 @@ .. image:: ../../_static/demo_axes_grid.png +.. note:: + AxesGrid toolkit has been a part of matplotlib since v + 0.99. Originally, the toolkit had a single namespace of + *axes_grid*. In more recent version (since svn r8226), the toolkit + has divided into two separate namespace (*axes_grid1* and *axisartist*). + While *axes_grid* namespace is maintained for he backward compatibility, + use of *axes_grid1* and *axisartist* is recommended. +.. warning:: + *axes_grid* and *axisartist* (but not *axes_grid1*) uses + a custome Axes class (derived from the mpl's original Axes class). + As a sideeffect, some commands (mostly tick-related) do not work. + Use *axes_grid1* to avoid this, or see how things are different in + *axes_grid* and *axisartist* (LINK needed) + + + Documentation ============= .. toctree:: :maxdepth: 2 + users/overview.rst users/index.rst howtos/index.rst api/index.rst Copied: trunk/matplotlib/doc/mpl_toolkits/axes_grid/users/axisartist.rst (from rev 8246, trunk/matplotlib/doc/mpl_toolkits/axes_grid/users/axislines.rst) =================================================================== --- trunk/matplotlib/doc/mpl_toolkits/axes_grid/users/axisartist.rst (rev 0) +++ trunk/matplotlib/doc/mpl_toolkits/axes_grid/users/axisartist.rst 2010-04-20 16:44:01 UTC (rev 8247) @@ -0,0 +1,456 @@ +.. _axisartist-manual: + +==================== +AXISARTIST namespace +==================== + +The AxisArtist namesapce includes a derived Axes implementation. The +biggest difference is that the artists responsible to draw axis line, +ticks, ticklabel and axis labels are separated out from the mpl's Axis +class, which are much more than artists in the original mpl. This +change was strongly motivated to support curvlinear grid. Here are a +few things that mpl_tootlkits.axisartist.Axes is different from original +Axes from mpl. + +* Axis elements (axis line(spine), ticks, ticklabel and axis labels) + are drawn by a AxisArtist instance. Unlike Axis, left, right, top + and bottom axis are drawn by separate artists. And each of them may + have different tick location and different tick labels. + +* gridlines are drawn by a Gridlines instance. The change was + motivated that in curvelinear coordinate, a gridline may not cross + axis-lines (i.e., no associated ticks). In the original Axes class, + gridlines are tied to ticks. + +* ticklines can be rotated if necessary (i.e, along the gridlines) + +In summary, all these changes was to support + +* a curvelinear grid. +* a floating axis + +.. plot:: mpl_toolkits/axes_grid/examples/demo_floating_axis.py + + +*mpl_toolkits.axisartist.Axes* class defines a *axis* attribute, which +is a dictionary of AxisArtist instances. By default, the dictionary +has 4 AxisArtist instances, responsible for drawing of left, right, +bottom and top axis. + +xaxis and yaxis attributes are still available, however they are set +to not visible. As separate artists are used for rendering axis, some +axis-related method in mpl may have no effect. +In addition to AxisArtist instances, the mpl_toolkits.axisartist.Axes will +have *gridlines* attribute (Gridlines), which obviously draws grid +lines. + +In both AxisArtist and Gridlines, the calculation of tick and grid +location is delegated to an instance of GridHelper class. +mpl_toolkits.axisartist.Axes class uses GridHelperRectlinear as a grid +helper. The GridHelperRectlinear class is a wrapper around the *xaxis* +and *yaxis* of mpl's original Axes, and it was meant to work as the +way how mpl's original axes works. For example, tick location changes +using set_ticks method and etc. should work as expected. But change in +artist properties (e.g., color) will not work in general, although +some effort has been made so that some often-change attributes (color, +etc.) are respected. + + +AxisArtist +========== + +AxisArtist can be considered as a container artist with following +attributes which will draw ticks, labels, etc. + + * line + * major_ticks, major_ticklabels + * minor_ticks, minor_ticklabels + * offsetText + * label + + +line +---- + +Derived from Line2d class. Responsible for drawing a spinal(?) line. + +major_ticks, minor_ticks +------------------------ + +Derived from Line2d class. Note that ticks are markers. + + +major_ticklabels, minor_ticklabels +---------------------------------- + +Derived from Text. Note that it is not a list of Text artist, but a +single artist (similar to a collection). + +axislabel +--------- + +Derived from Text. + + +Default AxisArtists +------------------- + +By default, following for axis artists are defined.:: + + ax.axis["left"], ax.axis["bottom"], ax.axis["right"], ax.axis["top"] + +The ticklabels and axislabel of the top and the right axis are set to +not visible. + +For example, if you want to change the color attributes of +major_ticklabels of the bottom x-axis :: + + ax.axis["bottom"].major_ticklabels.set_color("b") + +Similarly, to make ticklabels invisible :: + + ax.axis["bottom"].major_ticklabels.set_visible(False) + +AxisAritst provides a helper method to control the visibility of ticks, ticklabels, and label. To make ticklabel invisible, :: + + ax.axis["bottom"].toggle(ticklabels=False) + +To make all of ticks, ticklabels, and (axis) label invisible :: + + ax.axis["bottom"].toggle(all=False) + +To turn all off but ticks on :: + + ax.axis["bottom"].toggle(all=False, ticks=True) + +To turn all on but (axis) label off :: + + ax.axis["bottom"].toggle(all=True, label=False)) + + +ax.axis's __getitem__ method can take multiple axis names. For +example, to turn ticklabels of "top" and "right" axis on, :: + + ax.axis["top","right"].toggle(ticklabels=True)) + +Note that 'ax.axis["top","right"]' returns a simple proxy object that translate above code to something like below. :: + + for n in ["top","right"]: + ax.axis[n].toggle(ticklabels=True)) + +So, any return values in the for loop are ignored. And you shoud not +use it anything more than a simple method. + +Like the list indexing ":" means all items, i.e., :: + + ax.axis[:].major_ticks.set_color("r") + +changes tick color in all axis. + + +HowTo +===== + +1. Changing tick locations and label. + + Same as the original mpl's axes.:: + + ax.set_xticks([1,2,3]) + +2. Changing axis properties like color, etc. + + Change the properties of appropriate artists. For example, to change + the color of the ticklabels:: + + 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. + + +Rotaion and Alignment of TickLabels +=================================== + +This is also quite different from the original mpl and can be +confusing. When you want to rotate the ticklabels, first consider +using "set_axis_direction" method. :: + + ax1.axis["left"].major_ticklabels.set_axis_direction("top") + ax1.axis["right"].label.set_axis_direction("left") + +.. plot:: mpl_toolkits/axes_grid/figures/simple_axis_direction01.py + +The parameter for set_axis_direction is one of ["left", "right", +"bottom", "top"]. + +You must understand some underlying concept of directions. + + 1. There is a reference direction which is defined as the direction + of the axis line with increasing coordinate. For example, the + reference direction of the left x-axis is from bottom to top. + + .. plot:: mpl_toolkits/axes_grid/figures/axis_direction_demo_step01.py + + The direction, text angle, and alignments of the ticks, ticklabels and + axis-label is determined with respect to the reference direction + + 2. *ticklabel_direction* is either the right-hand side (+) of the + reference direction or the left-hand side (-). + + .. plot:: mpl_toolkits/axes_grid/figures/axis_direction_demo_step02.py + + 3. same for the *label_direction* + + .. plot:: mpl_toolkits/axes_grid/figures/axis_direction_demo_step03.py + + 4. ticks are by default drawn toward the opposite direction of the ticklabels. + + 5. text rotation of ticklabels and label is determined in reference + to the *ticklabel_direction* or *label_direction*, + respectively. The rotation of ticklabels and label is anchored. + + .. plot:: mpl_toolkits/axes_grid/figures/axis_direction_demo_step04.py + + +On the other hand, there is a concept of "axis_direction". This is a +default setting of above properties for each, "bottom", "left", "top", +and "right" axis. + + ========== =========== ========= ========== ========= ========== + ? ? left bottom right top + ---------- ----------- --------- ---------- --------- ---------- + axislabel direction '-' '+' '+' '-' + axislabel rotation 180 0 0 180 + axislabel va center top center bottom + axislabel ha right center right center + ticklabel direction '-' '+' '+' '-' + ticklabels rotation 90 0 -90 180 + ticklabel ha right center right center + ticklabel va center baseline center baseline + ========== =========== ========= ========== ========= ========== + + +And, 'set_axis_direction("top")' means to adjust the text rotation +etc, for settings suitable for "top" axis. The concept of axis +direction can be more clear with curved axis. + +.. plot:: mpl_toolkits/axes_grid/figures/demo_axis_direction.py + +The axis_drection can be adjusted in the AxisArtist level, or in the +level of its child arists, i.e., ticks, ticklabels, and axis-label. :: + + ax1.axis["left"].set_axis_direction("top") + +changes axis_direction of all the associated artist with the "left" +axis, while :: + + ax1.axis["left"].major_ticklabels.set_axis_direction("top") + +changes the axis_direction of only the major_ticklabels. Note that +set_axis_direction in the AxisArtist level changes the +ticklabel_direction and label_direction, while chainging the +axis_direction of ticks, ticklabels, and axis-label does not affect +them. + + +If you want to make ticks outward and ticklabels inside the axes, +use invert_ticklabel_direction method. :: + + ax.axis[:].invert_ticklabel_direction() + +A related method is "set_tick_out". It makes ticks outward (as a +matter of fact, it makes ticks toward the opposite direction of the +default direction). :: + + ax.axis[:].major_ticks.set_tick_out(True) + +.. plot:: mpl_toolkits/axes_grid/figures/simple_axis_direction03.py + + +So, in summary, + + * AxisArtist's methods + * set_axis_direction : "left", "right", "bottom", or "top" + * set_ticklabel_direction : "+" or "-" + * set_axislabel_direction : "+" or "-" + * invert_ticklabel_direction + * Ticks' methods (major_ticks and minor_ticks) + * set_tick_out : True or False + * set_ticksize : size in points + * TickLabels' methods (major_ticklabels and minor_ticklabels) + * set_axis_direction : "left", "right", "bottom", or "top" + * set_rotation : angle with respect to the renference direction + * set_ha and set_va : see below + * AxisLabels' methods (label) + * set_axis_direction : "left", "right", "bottom", or "top" + * set_rotation : angle with respect to the renference direction + * set_ha and set_va + + + +Adjusting ticklabels alignment +------------------------------ + +Alignment of TickLabels are treated specially. See below + +.. plot:: mpl_toolkits/axes_grid/figures/demo_ticklabel_alignment.py + +Adjusting pad +-------------- + +To change the pad between ticks and ticklabels :: + + ax.axis["left"].major_ticklabels.set_pad(10) + +Or ticklabels and axis-label :: + + ax.axis["left"].label.set_pad(10) + + +.. plot:: mpl_toolkits/axes_grid/figures/simple_axis_pad.py + + +GridHelper +========== + +To actually define a curvelinear coordinate, you have to use your own +grid helper. A generalised version of grid helper class is supplied +and this class should suffice in most of cases. A user may provide +two functions which defines a transformation (and its inverse pair) +from the curved coordinate to (rectlinear) image coordinate. Note that +while ticks and grids are drawn for curved coordinate, the data +transform of the axes itself (ax.transData) is still rectlinear +(image) coordinate. :: + + + from mpl_toolkits.axisartist.grid_helper_curvelinear \ + import GridHelperCurveLinear + from mpl_toolkits.axisartist import Subplot + + # from curved coordinate to rectlinear coordinate. + def tr(x, y): + x, y = np.asarray(x), np.asarray(y) + return x, y-x + + # from rectlinear coordinate to curved coordinate. + def inv_tr(x,y): + x, y = np.asarray(x), np.asarray(y) + return x, y+x + + + grid_helper = GridHelperCurveLinear((tr, inv_tr)) + + ax1 = Subplot(fig, 1, 1, 1, grid_helper=grid_helper) + + fig.add_subplot(ax1) + + +You may use matplotlib's Transform instance instead (but a +inverse transformation must be defined). Often, coordinate range in a +curved coordinate system may have a limited range, or may have +cycles. In those cases, a more customized version of grid helper is +required. :: + + + import mpl_toolkits.axisartist.angle_helper as angle_helper + + # PolarAxes.PolarTransform takes radian. However, we want our coordinate + # system in degree + tr = Affine2D().scale(np.pi/180., 1.) + PolarAxes.PolarTransform() + + + # 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) + # 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, + lon_cycle = 360, + lat_cycle = None, + lon_minmax = None, + lat_minmax = (0, np.inf), + ) + + # Find a grid values appropriate for the coordinate (degree, + # minute, second). The argument is a approximate number of grids. + grid_locator1 = angle_helper.LocatorDMS(12) + + # And also uses an appropriate formatter. Note that,the + # acceptable Locator and Formatter class is a bit different than + # that of mpl's, and you cannot directly use mpl's Locator and + # Formatter here (but may be possible in the future). + tick_formatter1 = angle_helper.FormatterDMS() + + grid_helper = GridHelperCurveLinear(tr, + extreme_finder=extreme_finder, + grid_locator1=grid_locator1, + tick_formatter1=tick_formatter1 + ) + + +Again, the *transData* of the axes is still a rectlinear coordinate +(image coordinate). You may manually do conversion between two +coordinates, or you may use Parasite Axes for convenience.:: + + ax1 = SubplotHost(fig, 1, 2, 2, grid_helper=grid_helper) + + # A parasite axes with given transform + ax2 = ParasiteAxesAuxTrans(ax1, tr, "equal") + # note that ax2.transData == tr + ax1.transData + # Anthing you draw in ax2 will match the ticks and grids of ax1. + ax1.parasites.append(ax2) + + +.. plot:: mpl_toolkits/axes_grid/examples/demo_curvelinear_grid.py + + + +FloatingAxis +============ + +A floating axis is an axis one of whose data coordinate is fixed, i.e, +its location is not fixed in Axes coordinate but changes as axes data +limits changes. A floating axis can be created using +*new_floating_axis* method. However, it is your responsibility that +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 + # (theta) is fixed at 60 + + ax1.axis["lat"] = axis = ax1.new_floating_axis(0, 60) + axis.label.set_text(r"$\theta = 60^{\circ}$") + axis.label.set_visible(True) + + +See the first example of this page. + +Current Limitations and TODO's +============================== + +The code need more refinement. Here is a incomplete list of issues and TODO's + +* No easy way to support a user customized tick location (for + curvelinear grid). A new Locator class needs to be created. + +* FloatingAxis may have coordinate limits, e.g., a floating axis of x + = 0, but y only spans from 0 to 1. + +* The location of axislabel of FloatingAxis needs to be optionally + given as a coordinate value. ex, a floating axis of x=0 with label at y=1 Deleted: trunk/matplotlib/doc/mpl_toolkits/axes_grid/users/axislines.rst =================================================================== --- trunk/matplotlib/doc/mpl_toolkits/axes_grid/users/axislines.rst 2010-04-20 16:43:42 UTC (rev 8246) +++ trunk/matplotlib/doc/mpl_toolkits/axes_grid/users/axislines.rst 2010-04-20 16:44:01 UTC (rev 8247) @@ -1,456 +0,0 @@ -.. _axislines-manual: - -========= -Axislines -========= - -Axislines includes a derived Axes implementation. The -biggest difference is that the artists responsible to draw axis line, -ticks, ticklabel and axis labels are separated out from the mpl's Axis -class, which are much more than artists in the original -mpl. This change was strongly motivated to support curvlinear -grid. Here are a few things that axes_grid.axislines.Axes is different -from original Axes from mpl. - -* Axis elements (axis line(spine), ticks, ticklabel and axis labels) - are drawn by a AxisArtist instance. Unlike Axis, left, right, top - and bottom axis are drawn by separate artists. And each of them may - have different tick location and different tick labels. - -* gridlines are drawn by a Gridlines instance. The change was - motivated that in curvelinear coordinate, a gridline may not cross - axislines (i.e., no associated ticks). In the original Axes class, - gridlines are tied to ticks. - -* ticklines can be rotated if necessary (i.e, along the gridlines) - -In summary, all these changes was to support - -* a curvelinear grid. -* a floating axis - -.. plot:: mpl_toolkits/axes_grid/examples/demo_floating_axis.py - - -*axes_grid.axislines.Axes* defines a *axis* attribute, which is a -dictionary of AxisArtist instances. By default, the dictionary has 4 -AxisArtist instances, responsible for drawing of left, right, bottom -and top axis. - -xaxis and yaxis attributes are still available, however they are set -to not visible. As separate artists are used for rendering axis, some -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. - -In both AxisArtist and Gridlines, the calculation of tick and grid -location is delegated to an instance of GridHelper class. -axes_grid.axislines.Axes class uses GridHelperRectlinear as a grid -helper. The GridHelperRectlinear class is a wrapper around the *xaxis* -and *yaxis* of mpl's original Axes, and it was meant to work as the -way how mpl's original axes works. For example, tick location changes -using set_ticks method and etc. should work as expected. But change in -artist properties (e.g., color) will not work in general, although -some effort has been made so that some often-change attributes (color, -etc.) are respected. - - -AxisArtist -========== - -AxisArtist can be considered as a container artist with following -attributes which will draw ticks, labels, etc. - - * line - * major_ticks, major_ticklabels - * minor_ticks, minor_ticklabels - * offsetText - * label - - -line ----- - -Derived from Line2d class. Responsible for drawing a spinal(?) line. - -major_ticks, minor_ticks ------------------------- - -Derived from Line2d class. Note that ticks are markers. - - -major_ticklabels, minor_ticklabels ----------------------------------- - -Derived from Text. Note that it is not a list of Text artist, but a -single artist (similar to a collection). - -axislabel ---------- - -Derived from Text. - - -Default AxisArtists -------------------- - -By default, following for axis artists are defined.:: - - ax.axis["left"], ax.axis["bottom"], ax.axis["right"], ax.axis["top"] - -The ticklabels and axislabel of the top and the right axis are set to -not visible. - -For example, if you want to change the color attributes of -major_ticklabels of the bottom x-axis :: - - ax.axis["bottom"].major_ticklabels.set_color("b") - -Similarly, to make ticklabels invisible :: - - ax.axis["bottom"].major_ticklabels.set_visible(False) - -AxisAritst provides a helper method to control the visibility of ticks, ticklabels, and label. To make ticklabel invisible, :: - - ax.axis["bottom"].toggle(ticklabels=False) - -To make all of ticks, ticklabels, and (axis) label invisible :: - - ax.axis["bottom"].toggle(all=False) - -To turn all off but ticks on :: - - ax.axis["bottom"].toggle(all=False, ticks=True) - -To turn all on but (axis) label off :: - - ax.axis["bottom"].toggle(all=True, label=False)) - - -ax.axis's __getitem__ method can take multiple axis names. For -example, to turn ticklabels of "top" and "right" axis on, :: - - ax.axis["top","right"].toggle(ticklabels=True)) - -Note that 'ax.axis["top","right"]' returns a simple proxy object that translate above code to something like below. :: - - for n in ["top","right"]: - ax.axis[n].toggle(ticklabels=True)) - -So, any return values in the for loop are ignored. And you shoud not -use it anything more than a simple method. - -Like the list indexing ":" means all items, i.e., :: - - ax.axis[:].major_ticks.set_color("r") - -changes tick color in all axis. - - -HowTo -===== - -1. Changing tick locations and label. - - Same as the original mpl's axes.:: - - ax.set_xticks([1,2,3]) - -2. Changing axis properties like color, etc. - - Change the properties of appropriate artists. For example, to change - the color of the ticklabels:: - - 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. - - -Rotaion and Alignment of TickLabels -=================================== - -This is also quite different from the original mpl and can be -confusing. When you want to rotate the ticklabels, first consider -using "set_axis_direction" method. :: - - ax1.axis["left"].major_ticklabels.set_axis_direction("top") - ax1.axis["right"].label.set_axis_direction("left") - -.. plot:: mpl_toolkits/axes_grid/figures/simple_axis_direction01.py - -The parameter for set_axis_direction is one of ["left", "right", -"bottom", "top"]. - -You must understand some underlying concept of directions. - - 1. There is a reference direction which is defined as the direction - of the axis line with increasing coordinate. For example, the - reference direction of the left x-axis is from bottom to top. - - .. plot:: mpl_toolkits/axes_grid/figures/axis_direction_demo_step01.py - - The direction, text angle, and alignments of the ticks, ticklabels and - axis-label is determined width respect to the reference direction - - 2. *ticklabel_direction* is either the right-hand side (+) of the - reference direction or the left-hand side (-). - - .. plot:: mpl_toolkits/axes_grid/figures/axis_direction_demo_step02.py - - 3. same for the *label_direction* - - .. plot:: mpl_toolkits/axes_grid/figures/axis_direction_demo_step03.py - - 4. ticks are by default drawn toward the opposite direction of the ticklabels. - - 5. text rotation of ticklabels and label is determined in reference - to the *ticklabel_direction* or *label_direction*, - respectively. The rotation of ticklabels and tlabel is anchored. - - .. plot:: mpl_toolkits/axes_grid/figures/axis_direction_demo_step04.py - - -On the other hand, there is a concept of "axis_direction". This is a -default setting of above properties for each, "bottom", "left", "top", -and "right" axis. - - ========== =========== ========= ========== ========= ========== - ? ? left bottom right top - ---------- ----------- --------- ---------- --------- ---------- - axislabel direction '-' '+' '+' '-' - axislabel rotation 180 0 0 180 - axislabel va center top center bottom - axislabel ha right center right center - ticklabel direction '-' '+' '+' '-' - ticklabels rotation 90 0 -90 180 - ticklabel ha right center right center - ticklabel va center baseline center baseline - ========== =========== ========= ========== ========= ========== - - -And, 'set_axis_direction("top")' means to adjust the text rotation -etc, for settings suitable for "top" axis. The concept of axis -direction can be more clear with curved axis. - -.. plot:: mpl_toolkits/axes_grid/figures/demo_axis_direction.py - -The axis_drection can be adjusted in the AxisArtist level, or in the -level of its child arists, i.e., ticks, ticklabels, and axis-label. :: - - ax1.axis["left"].set_axis_direction("top") - -changes axis_direction of all the associated artist with the "left" -axis, while :: - - ax1.axis["left"].major_ticklabels.set_axis_direction("top") - -changes the axis_direction of only the major_ticklabels. Note that -set_axis_direction in the AxisArtist level changes the -ticklabel_direction and label_direction, while chainging the -axis_direction of ticks, ticklabels, and axis-label does not affect -them. - - -If you want to make ticks outward and ticklabels inside the axes, -use invert_ticklabel_direction method. :: - - ax.axis[:].invert_ticklabel_direction() - -A related method is "set_tick_out". It makes ticks outward (as a -matter of fact, it makes ticks toward the opposite direction of the -default direction). :: - - ax.axis[:].major_ticks.set_tick_out(True) - -.. plot:: mpl_toolkits/axes_grid/figures/simple_axis_direction03.py - - -So, in summary, - - * AxisArtist's methods - * set_axis_direction : "left", "right", "bottom", or "top" - * set_ticklabel_direction : "+" or "-" - * set_axislabel_direction : "+" or "-" - * invert_ticklabel_direction - * Ticks' methods (major_ticks and minor_ticks) - * set_tick_out : True or False - * set_ticksize : size in points - * TickLabels' methods (major_ticklabels and minor_ticklabels) - * set_axis_direction : "left", "right", "bottom", or "top" - * set_rotation : angle with respect to the renference direction - * set_ha and set_va : see below - * AxisLabels' methods (label) - * set_axis_direction : "left", "right", "bottom", or "top" - * set_rotation : angle with respect to the renference direction - * set_ha and set_va - - - -Adjusting ticklabels alignment ------------------------------- - -Alignment of TickLabels are treated specially. See below - -.. plot:: mpl_toolkits/axes_grid/figures/demo_ticklabel_alignment.py - -Adjusting pad --------------- - -To change the pad between ticks and ticklabels :: - - ax.axis["left"].major_ticklabels.set_pad(10) - -Or ticklabels and axis-label :: - - ax.axis["left"].label.set_pad(10) - - -.. plot:: mpl_toolkits/axes_grid/figures/simple_axis_pad.py - - -GridHelper -========== - -To actually define a curvelinear coordinate, you have to use your own -grid helper. A generalised version of grid helper class is supplied -and this class should be suffice in most of cases. A user may provide -two functions which defines a transformation (and its inverse pair) -from the curved coordinate to (rectlinear) image coordinate. Note that -while ticks and grids are drawn for curved coordinate, the data -transform of the axes itself (ax.transData) is still rectlinear -(image) coordinate. :: - - - from mpl_toolkits.axes_grid.grid_helper_curvelinear \ - import GridHelperCurveLinear - from mpl_toolkits.axes_grid.axislines import Subplot - - # from curved coordinate to rectlinear coordinate. - def tr(x, y): - x, y = np.asarray(x), np.asarray(y) - return x, y-x - - # from rectlinear coordinate to curved coordinate. - def inv_tr(x,y): - x, y = np.asarray(x), np.asarray(y) - return x, y+x - - - grid_helper = GridHelperCurveLinear((tr, inv_tr)) - - ax1 = Subplot(fig, 1, 1, 1, grid_helper=grid_helper) - - fig.add_subplot(ax1) - - -You may use matplotlib's Transform instance instead (but a -inverse transformation must be defined). Often, coordinate range in a -curved coordinate system may have a limited range, or may have -cycles. In those cases, a more customized version of grid helper is -required. :: - - - import mpl_toolkits.axes_grid.angle_helper as angle_helper - - # PolarAxes.PolarTransform takes radian. However, we want our coordinate - # system in degree - tr = Affine2D().scale(np.pi/180., 1.) + PolarAxes.PolarTransform() - - - # 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) - # 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, - lon_cycle = 360, - lat_cycle = None, - lon_minmax = None, - lat_minmax = (0, np.inf), - ) - - # Find a grid values appropriate for the coordinate (degree, - # minute, second). The argument is a approximate number of grids. - grid_locator1 = angle_helper.LocatorDMS(12) - - # And also uses an appropriate formatter. Note that,the - # acceptable Locator and Formatter class is a bit different than - # that of mpl's, and you cannot directly use mpl's Locator and - # Formatter here (but may be possible in the future). - tick_formatter1 = angle_helper.FormatterDMS() - - grid_helper = GridHelperCurveLinear(tr, - extreme_finder=extreme_finder, - grid_locator1=grid_locator1, - tick_formatter1=tick_formatter1 - ) - - -Again, the *transData* of the axes is still a rectlinear coordinate -(image coordinate). You may manually do conversion between two -coordinates, or you may use Parasite Axes for convenience.:: - - ax1 = SubplotHost(fig, 1, 2, 2, grid_helper=grid_helper) - - # A parasite axes with given transform - ax2 = ParasiteAxesAuxTrans(ax1, tr, "equal") - # note that ax2.transData == tr + ax1.transData - # Anthing you draw in ax2 will match the ticks and grids of ax1. - ax1.parasites.append(ax2) - - -.. plot:: mpl_toolkits/axes_grid/examples/demo_curvelinear_grid.py - - - -FloatingAxis -============ - -A floating axis is an axis one of whose data coordinate is fixed, i.e, -its location is not fixed in Axes coordinate but changes as axes data -limits changes. A floating axis can be created using -*new_floating_axis* method. However, it is your responsibility that -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 - # (theta) is fixed at 60 - - ax1.axis["lat"] = axis = ax1.new_floating_axis(0, 60) - axis.label.set_text(r"$\theta = 60^{\circ}$") - axis.label.set_visible(True) - - -See the first example of this page. - -Current Limitations and TODO's -============================== - -The code need more refinement. Here is a incomplete list of issues and TODO's - -* No easy way to support a user customized tick location (for - curvelinear grid). A new Locator class needs to be created. - -* FloatingAxis may have coordinate limits, e.g., a floating axis of x - = 0, but y only spans from 0 to 1. - -* The location of axislabel of FloatingAxis needs to be optionally - given as a coordinate value. ex, a floating axis of x=0 with label at y=1 Modified: trunk/matplotlib/doc/mpl_toolkits/axes_grid/users/index.rst =================================================================== --- trunk/matplotlib/doc/mpl_toolkits/axes_grid/users/index.rst 2010-04-20 16:43:42 UTC (rev 8246) +++ trunk/matplotlib/doc/mpl_toolkits/axes_grid/users/index.rst 2010-04-20 16:44:01 UTC (rev 8247) @@ -9,6 +9,6 @@ .. toctree:: - overview.rst axes_divider.rst - axislines.rst + axisartist.rst + Modified: trunk/matplotlib/doc/mpl_toolkits/axes_grid/users/overview.rst =================================================================== --- trunk/matplotlib/doc/mpl_toolkits/axes_grid/users/overview.rst 2010-04-20 16:43:42 UTC (rev 8246) +++ trunk/matplotlib/doc/mpl_toolkits/axes_grid/users/overview.rst 2010-04-20 16:44:01 UTC (rev 8247) @@ -1,7 +1,10 @@ -======== -Overview -======== +============================ +Overview of AxesGrid toolkit +============================ +What is AxesGrid toolkit? +========================= + The matplotlib AxesGrid toolkit is a collection of helper classes, mainly to ease displaying (multiple) images in matplotlib. @@ -9,30 +12,65 @@ :depth: 1 :local: -`AxesGrid`_, `RGB Axes`_ and `AxesDivider`_ are helper classes that -deals with adjusting the location of (multiple) Axes, mainly for -displaying images. It provides a framework to adjust the position of -multiple axes at the drawing time. `ParasiteAxes`_ provides twinx(or -twiny)-like features so that you can plot different data (e.g., -different y-scale) in a same Axes. `AxisLine`_ is a custom Axes -class. Unlike default Axes in matpotlib, each axis (left, right, top -and bottom) is associated with a separate artist (which is resposible -to draw axis-line, ticks, ticklabels, label). `AnchoredArtists`_ +.. note:: + AxesGrid toolkit has been a part of matplotlib since v + 0.99. Originally, the toolkit had a single namespace of + *axes_grid*. In more recent version (since svn r8226), the toolkit + has divided into two separate namespace (*axes_grid1* and *axisartist*). + While *axes_grid* namespace is maintained for he backward compatibility, + use of *axes_grid1* and *axisartist* is recommended. + +.. warning:: + *axes_grid* and *axisartist* (but not *axes_grid1*) uses + a custome Axes class (derived from the mpl's original Axes class). + As a sideeffect, some commands (mostly tick-related) do not work. + Use *axes_grid1* to avoid this, or see how things are different in + *axes_grid* and *axisartist* (LINK needed) + + +AxesGrid toolkit has two namespaces (*axes_grid1* and *axisartist*). +*axisartist* contains custome Axes class that is meant to support for +curvilinear grids (e.g., the world coordinate system in astronomy). +Unlike mpl's original Axes class which uses Axes.xaxis and Axes.yaxis +to draw ticks, ticklines and etc., Axes in axisartist uses special +artist (AxisArtist) which can handle tick, ticklines and etc. for +curved coordinate systems. + +.. plot:: mpl_toolkits/axes_grid/examples/demo_floating_axis.py + +Since it uses a special artists, some mpl commands that work on +Axes.xaxis and Axes.yaxis may not work. See LINK for more detail. + + +*axes_grid1* is a collection of helper classes to ease displaying +(multiple) images with matplotlib. In matplotlib, the axes location +(and size) is specified in the normalized figure coordinates, which +may not be ideal for displaying images that needs to have a given +aspect ratio. For example, it helps you to have a colobar whose +height always matches that of the image. `AxesGrid`_, `RGB Axes`_ and +`AxesDivider`_ are helper classes that deals with adjusting the +location of (multiple) Axes. They provides a framework to adjust the +position of multiple axes at the drawing time. `ParasiteAxes`_ +provides twinx(or twiny)-like features so that you can plot different +data (e.g., different y-scale) in a same Axes. `AnchoredArtists`_ includes custom artists which are placed at some anchored position, like the legend. +.. plot:: mpl_toolkits/axes_grid/examples/demo_axes_grid.py +AXES_GRID1 +========== -AxesGrid -======== +ImageGrid +--------- A class that creates a grid of Axes. In matplotlib, the axes location (and size) is specified in the normalized figure coordinates. This may not be ideal for images that needs to be displayed with a given aspect ratio. For example, displaying images of a same size with some fixed -padding between them cannot be easily done in matplotlib. AxesGrid is +padding between them cannot be easily done in matplotlib. ImageGrid is used in such case. .. plot:: mpl_toolkits/axes_grid/examples/simple_axesgrid.py @@ -60,7 +98,7 @@ -When initialized, AxesGrid creates given number (*ngrids* or *ncols* * +When initialized, ImageGrid creates given number (*ngrids* or *ncols* * *nrows* if *ngrids* is None) of Axes instances. A sequence-like interface is provided to access the individual Axes instances (e.g., grid[0] is the first Axes in the grid. See below for the order of @@ -140,32 +178,10 @@ .. plot:: mpl_toolkits/axes_grid/examples/demo_axes_grid.py -RGB Axes -======== - -RGBAxes is a helper clase to conveniently show RGB composite -images. Like AxesGrid, the location of axes are adjusted so that the -area occupied by them fits in a given rectangle. Also, the xaxis and -yaxis of each axes are shared. :: - - from mpl_toolkits.axes_grid.axes_rgb import RGBAxes - - fig = plt.figure(1) - ax = RGBAxes(fig, [0.1, 0.1, 0.8, 0.8]) - - r, g, b = get_rgb() # r,g,b are 2-d images - ax.imshow_rgb(r, g, b, - origin="lower", interpolation="nearest") - - -.. plot:: mpl_toolkits/axes_grid/figures/simple_rgb.py - - - AxesDivider -=========== +----------- -Behind the scene, the AxesGrid class and the RGBAxes class utilize the +Behind the scene, the ImageGrid class and the RGBAxes class utilize the AxesDivider class, whose role is to calculate the location of the axes at drawing time. While a more about the AxesDivider is (will be) explained in (yet to be written) AxesDividerGuide, direct use of the @@ -181,44 +197,45 @@ *make_axes_locatable* returns an isntance of the AxesLocator class, -derived from the Locator. It has *new_vertical*, and *new_horizontal* -methods. The *new_vertical* (*new_horizontal*) creates a new axes on -the upper (right) side of the original axes. +derived from the Locator. It provides *append_axes* method that +creates a new axes on the given side of ("top", "right", "bottom" and +"left") of the original axes. -scatter_hist.py with AxesDivider --------------------------------- -The "scatter_hist.py" example in mpl can be rewritten using -*make_axes_locatable*. :: +colorbar whose height (or width) in sync with the master axes +------------------------------------------------------------- - from mpl_toolkits.axes_grid import make_axes_locatable +.. plot:: mpl_toolkits/axes_grid/figures/simple_colorbar.py + :include-source: - axScatter = subplot(111) - divider = make_axes_locatable(axScatter) - # create new axes on the right and on the top of the current axes - # The first argument of the new_vertical(new_horizontal) method is - # the height (width) of the axes to be created in inches. - axHistx = divider.new_vertical(1.2, pad=0.1, sharex=axScatter) - axHisty = divider.new_horizontal(1.2, pad=0.1, sharey=axScatter) - fig.add_axes(axHistx) - fig.add_axes(axHisty) +scatter_hist.py with AxesDivider +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - # the scatter plot: +The "scatter_hist.py" example in mpl can be rewritten using +*make_axes_locatable*. :: + + axScatter = subplot(111) axScatter.scatter(x, y) axScatter.set_aspect(1.) + # create new axes on the right and on the top of the current axes. + divider = make_axes_locatable(axScatter) + axHistx = divider.append_axes("top", size=1.2, pad=0.1, sharex=axScatter) + axHisty = divider.append_axes("right", size=1.2, pad=0.1, sharey=axScatter) + + # the scatter plot: # histograms bins = np.arange(-lim, lim + binwidth, binwidth) axHistx.hist(x, bins=bins) axHisty.hist(y, bins=bins, orientation='horizontal') + See the full source code below. - .. plot:: mpl_toolkits/axes_grid/examples/scatter_hist.py @@ -229,86 +246,42 @@ ParasiteAxes -============ +------------ -The ParasiteAxes is a axes whose location is identical to its host +The ParasiteAxes is an axes whose location is identical to its host axes. The location is adjusted in the drawing time, thus it works even -if the host change its location (e.g., images). It provides *twinx*, -*twiny* (similar to twinx and twiny in the matplotlib). Also it -provides *twin*, which takes an arbitraty tranfromation that maps -between the data coordinates of the host and the parasite axes. -Artists in each axes are mergred and drawn acrroding to their zorder. -It also modifies some behavior of the axes. For example, color cycle -for plot lines are shared between host and parasites. Also, the legend -command in host, creates a legend that includes lines in the parasite -axes. +if the host change its location (e.g., images). +In most cases, you first create a host axes, which provides a few +method that can be used to create parasite axes. They are *twinx*, +*twiny* (which are similar to twinx and twiny in the matplotlib) and +*twin*. *twin* takes an arbitraty tranfromation that maps between the +data coordinates of the host axes and the parasite axes. *draw* +method of the parasite axes are never called. Instead, host axes +collects artists in parasite axes and draw them as if they belong to +the host axes, i.e., artists in parasite axes are merged to those of +the host axes and then drawn according to their zorder. The host and +parasite axes modifies some of the axes behavior. For example, color +cycle for plot lines are shared between host and parasites. Also, the +legend command in host, creates a legend that includes lines in the +parasite axes. To create a host axes, you may use *host_suplot* or +*host_axes* command. + + Example 1. twinx ----------------- +~~~~~~~~~~~~~~~~ .. plot:: mpl_toolkits/axes_grid/figures/parasite_simple.py :include-source: Example 2. twin ---------------- +~~~~~~~~~~~~~~~ -A more sophiscated example using twin. Note that if you change the -x-limit in the host axes, the x-limit of the parasite axes will change -accordingly. +*twin* without a transform argument treat the parasite axes to have a +same data transform as the host. This can be useful when you want the +top(or right)-axis to have different tick-locations, tick-labels, or +tick-formatter for bottom(or left)-axis. :: - -.. plot:: mpl_toolkits/axes_grid/examples/parasite_simple2.py - - - -AxisLine -======== - -AxisLine is a custom (and very experimenta) Axes class, where each -axis (left, right, top and bottom) have a separate artist associated -(which is resposible to draw axis-line, ticks, ticklabels, label). -Also, you can create your own axis, which can pass through a fixed -position in the axes coordinate, or a fixed position in the data -coordinate (i.e., the axis floats around when viewlimit changes). - -Most of the class in this toolkit is based on this class. And it has -not been tested extensibly. You may go back to the original mpl -behanvior, by :: - - ax.toggle_axisline(False) - -The axes class, by default, provides 4 artists which are responsible -to draw axis in "left","right","bottom" and "top". They are accessed -as ax.axis["left"], ax.axis["right"], and so on, i.e., ax.axis is a -dictionary that contains artists (note that ax.axis is still a -callable methods and it behaves as an original Axes.axis method in -mpl). - -For example, you can hide right, and top axis by :: - - ax.axis["right"].set_visible(False) - ax.axis["top"].set_visible(False) - - -.. plot:: mpl_toolkits/axes_grid/figures/simple_axisline3.py - - -SubplotZero gives you two more additional (floating?) axis of x=0 and -y=0 (in data coordinate) - -.. plot:: mpl_toolkits/axes_grid/figures/simple_axisline2.py - :include-source: - - -Axisline with ParasiteAxes --------------------------- - -Most of axes class in the axes_grid toolkit, including ParasiteAxes, -is based on the Axisline axes. The combination of the two can be -useful in some case. For example, you can have different tick-location, -tick-label, or tick-formatter for bottom and top (or left and right) -axis. :: - ax2 = ax.twin() # now, ax2 is responsible for "top" axis and "right" axis ax2.set_xticks([0., .5*np.pi, np.pi, 1.5*np.pi, 2*np.pi]) ax2.set_xticklabels(["0", r"$\frac{1}{2}\pi$", @@ -318,23 +291,17 @@ .. plot:: mpl_toolkits/axes_grid/examples/simple_axisline4.py -AxisLine Axes lets you create a custom axis, :: - # make new (right-side) yaxis, but w... [truncated message content] |