From 17204e5ad09c39a55904af97920f6936c9fdf046 Mon Sep 17 00:00:00 2001 From: Antony Lee Date: Sat, 9 Feb 2019 21:03:36 +0100 Subject: [PATCH] Cleanup demo_curvelinear_grid. --- examples/axisartist/demo_curvelinear_grid.py | 101 ++++++++----------- 1 file changed, 40 insertions(+), 61 deletions(-) diff --git a/examples/axisartist/demo_curvelinear_grid.py b/examples/axisartist/demo_curvelinear_grid.py index 512ca31bb99c..9d1d4f7b3f76 100644 --- a/examples/axisartist/demo_curvelinear_grid.py +++ b/examples/axisartist/demo_curvelinear_grid.py @@ -1,31 +1,31 @@ """ ===================== -Demo Curvelinear Grid +Curvilinear grid demo ===================== Custom grid and ticklines. -This example demonstrates how to use GridHelperCurveLinear to define -custom grids and ticklines by applying a transformation on the grid. -This can be used, as showcase on the second plot, to create polar -projections in a rectangular box. +This example demonstrates how to use +`~.grid_helper_curvelinear.GridHelperCurveLinear` to define custom grids and +ticklines by applying a transformation on the grid. This can be used, as +shown on the second plot, to create polar projections in a rectangular box. """ import numpy as np import matplotlib.pyplot as plt -import matplotlib.cbook as cbook +from matplotlib.projections import PolarAxes +from matplotlib.transforms import Affine2D -from mpl_toolkits.axisartist import Subplot -from mpl_toolkits.axisartist import SubplotHost, \ - ParasiteAxesAuxTrans -from mpl_toolkits.axisartist.grid_helper_curvelinear import \ - GridHelperCurveLinear +from mpl_toolkits.axisartist import ( + angle_helper, Subplot, SubplotHost, ParasiteAxesAuxTrans) +from mpl_toolkits.axisartist.grid_helper_curvelinear import ( + GridHelperCurveLinear) def curvelinear_test1(fig): """ - grid for custom transform. + Grid for custom transform. """ def tr(x, y): @@ -46,67 +46,49 @@ def inv_tr(x, y): fig.add_subplot(ax1) - xx, yy = tr([3, 6], [5.0, 10.]) + xx, yy = tr([3, 6], [5, 10]) ax1.plot(xx, yy, linewidth=2.0) - ax1.set_aspect(1.) - ax1.set_xlim(0, 10.) - ax1.set_ylim(0, 10.) + ax1.set_aspect(1) + ax1.set_xlim(0, 10) + ax1.set_ylim(0, 10) - ax1.axis["t"] = ax1.new_floating_axis(0, 3.) - ax1.axis["t2"] = ax1.new_floating_axis(1, 7.) + ax1.axis["t"] = ax1.new_floating_axis(0, 3) + ax1.axis["t2"] = ax1.new_floating_axis(1, 7) ax1.grid(True, zorder=0) -import mpl_toolkits.axisartist.angle_helper as angle_helper - -from matplotlib.projections import PolarAxes -from matplotlib.transforms import Affine2D - - def curvelinear_test2(fig): """ - polar projection, but in a rectangular box. + Polar projection, but in a rectangular box. """ # PolarAxes.PolarTransform takes radian. However, we want our coordinate # system in degree - tr = Affine2D().scale(np.pi/180., 1.) + PolarAxes.PolarTransform() - - # polar projection, which involves cycle, and also has limits in + tr = Affine2D().scale(np.pi/180, 1) + PolarAxes.PolarTransform() + # Polar projection, which involves cycle, and also has limits in # its coordinates, needs a special method to find the extremes # (min, max of the coordinate within the view). - - # 20, 20 : number of sampling points along x, y direction - extreme_finder = angle_helper.ExtremeFinderCycle(20, 20, - lon_cycle=360, - lat_cycle=None, - lon_minmax=None, - lat_minmax=(0, np.inf), - ) - + extreme_finder = angle_helper.ExtremeFinderCycle( + nx=20, ny=20, # Number of sampling points in each direction. + lon_cycle=360, lat_cycle=None, + lon_minmax=None, lat_minmax=(0, np.inf), + ) + # Find grid values appropriate for the coordinate (degree, minute, second). grid_locator1 = angle_helper.LocatorDMS(12) - # Find a grid values appropriate for the coordinate (degree, - # minute, second). - + # Use an appropriate formatter. Note that the acceptable Locator and + # Formatter classes are a bit different than that of Matplotlib, which + # cannot directly be used here (this may be possible in the future). tick_formatter1 = angle_helper.FormatterDMS() - # 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). - - grid_helper = GridHelperCurveLinear(tr, - extreme_finder=extreme_finder, - grid_locator1=grid_locator1, - tick_formatter1=tick_formatter1 - ) + grid_helper = GridHelperCurveLinear( + tr, extreme_finder=extreme_finder, + grid_locator1=grid_locator1, tick_formatter1=tick_formatter1) ax1 = SubplotHost(fig, 1, 2, 2, grid_helper=grid_helper) # make ticklabels of right and top axis visible. ax1.axis["right"].major_ticklabels.set_visible(True) ax1.axis["top"].major_ticklabels.set_visible(True) - # let right axis shows ticklabels for 1st coordinate (angle) ax1.axis["right"].get_helper().nth_coord_ticks = 0 # let bottom axis shows ticklabels for 2nd coordinate (radius) @@ -114,21 +96,18 @@ def curvelinear_test2(fig): fig.add_subplot(ax1) + ax1.set_aspect(1) + ax1.set_xlim(-5, 12) + ax1.set_ylim(-5, 10) + + ax1.grid(True, zorder=0) + # A parasite axes with given transform ax2 = ParasiteAxesAuxTrans(ax1, tr, "equal") # note that ax2.transData == tr + ax1.transData # Anything you draw in ax2 will match the ticks and grids of ax1. ax1.parasites.append(ax2) - intp = cbook.simple_linear_interpolation - ax2.plot(intp(np.array([0, 30]), 50), - intp(np.array([10., 10.]), 50), - linewidth=2.0) - - ax1.set_aspect(1.) - ax1.set_xlim(-5, 12) - ax1.set_ylim(-5, 10) - - ax1.grid(True, zorder=0) + ax2.plot(np.linspace(0, 30, 51), np.linspace(10, 10, 51), linewidth=2) if __name__ == "__main__":