def quantity_converter(): # Create an instance of the conversion interface and # mock so we can check methods called qc = munits.ConversionInterface() def convert(value, unit, axis): if hasattr(value, 'units'): return value.to(unit).magnitude elif np.iterable(value): try: return [v.to(unit).magnitude for v in value] except AttributeError: return [Quantity(v, axis.get_units()).to(unit).magnitude for v in value] else: return Quantity(value, axis.get_units()).to(unit).magnitude def default_units(value, axis): if hasattr(value, 'units'): return value.units elif np.iterable(value): for v in value: if hasattr(v, 'units'): return v.units return None qc.convert = MagicMock(side_effect=convert) qc.axisinfo = MagicMock(side_effect=lambda u, a: munits.AxisInfo(label=u)) qc.default_units = MagicMock(side_effect=default_units) return qc
def axisinfo(unit, axis): """: Returns information on how to handle an axis that has Epoch data. = INPUT VARIABLES - unit The units to use for a axis with Epoch data. = RETURN VALUE - Returns a matplotlib AxisInfo data structure that contains minor/major formatters, major/minor locators, and default label information. """ # Delay-load due to circular dependencies. import matplotlib.testing.jpl_units as U # Check to see if the value used for units is a string unit value # or an actual instance of a UnitDbl so that we can use the unit # value for the default axis label value. if unit: label = unit if isinstance(unit, str) else unit.label() else: label = None if label == "deg" and isinstance(axis.axes, polar.PolarAxes): # If we want degrees for a polar plot, use the PolarPlotFormatter majfmt = polar.PolarAxes.ThetaFormatter() else: majfmt = U.UnitDblFormatter(useOffset=False) return units.AxisInfo(majfmt=majfmt, label=label)
def axisinfo(unit, axis): if unit != 'time': return None majloc = AutoLocator() majfmt = TimeFormatter(majloc) return units.AxisInfo(majloc=majloc, majfmt=majfmt, label='time')
def axisinfo(unit, axis): if unit == u.radian: return units.AxisInfo( majloc=ticker.MultipleLocator(base=np.pi / 2), majfmt=ticker.FuncFormatter(rad_fn), label=unit.to_string(), ) elif unit == u.degree: return units.AxisInfo( majloc=ticker.AutoLocator(), majfmt=ticker.FormatStrFormatter('%i°'), label=unit.to_string(), ) elif unit is not None: return units.AxisInfo(label=unit.to_string(format)) return None
def axisinfo(unit, axis): """ Returns the :class:`~matplotlib.units.AxisInfo` for *unit*. *unit* is a tzinfo instance or None. The *axis* argument is required but not used. """ calendar, date_unit, date_type = unit majloc = NetCDFTimeDateLocator(4, calendar=calendar, date_unit=date_unit) majfmt = NetCDFTimeDateFormatter(majloc, calendar=calendar, time_units=date_unit) if date_type is CalendarDateTime: datemin = CalendarDateTime(cftime.datetime(2000, 1, 1), calendar=calendar) datemax = CalendarDateTime(cftime.datetime(2010, 1, 1), calendar=calendar) else: datemin = date_type(2000, 1, 1) datemax = date_type(2010, 1, 1) return munits.AxisInfo(majloc=majloc, majfmt=majfmt, label='', default_limits=(datemin, datemax))
def axisinfo(unit, axis) -> units.AxisInfo | None: if unit != "time": return None majloc = AutoLocator() majfmt = TimeFormatter(majloc) return units.AxisInfo(majloc=majloc, majfmt=majfmt, label="time")
def axisinfo(unit, axis): """ Set the default axis ticks and labels. Parameters ---------- unit : `.UnitData` object string unit information for value axis : `~matplotlib.axis.Axis` axis for which information is being set .. note:: *axis* is not used Returns ------- `~matplotlib.units.AxisInfo` Information to support default tick labeling """ StrCategoryConverter._validate_unit(unit) # locator and formatter take mapping dict because # args need to be pass by reference for updates majloc = StrCategoryLocator(unit._mapping) majfmt = StrCategoryFormatter(unit._mapping) return units.AxisInfo(majloc=majloc, majfmt=majfmt)
def axisinfo(self, unit, axis): """ Return major and minor tick locators and formatters. """ majloc = AstropyTimeLocator(self) majfmt = AstropyTimeFormatter(self) return units.AxisInfo(majfmt=majfmt, majloc=majloc, label=f'Time ({self.scale})')
def axisinfo(self, unit, axis): # docstring inherited majloc = AutoTimedeltaLocator() majfmt = ConciseTimedeltaFormatter(majloc, **self.formatter_args) datemin = datetime.timedelta(days=1) datemax = datetime.timedelta(days=2) return units.AxisInfo(majloc=majloc, majfmt=majfmt, label='', default_limits=(datemin, datemax))
def axisinfo(unit, axis): 'return the Foo AxisInfo' if unit == 1.0 or unit == 2.0: return units.AxisInfo( majloc=ticker.IndexLocator(4, 0), majfmt=ticker.FormatStrFormatter("VAL: %s"), label='foo', ) else: return None
def axisinfo(unit): 'return the unit AxisInfo' if unit=='date': majloc = AutoDateLocator() majfmt = AutoDateFormatter(majloc) return units.AxisInfo( majloc = majloc, majfmt = majfmt, label='date', ) else: return None
def axisinfo(unit, axis): 'return the unit AxisInfo' # make sure that the axis does not start at 0 majloc = AutoDateLocator(tz=unit) majfmt = AutoDateFormatter(majloc, tz=unit) datemin = datetime.date(2000, 1, 1) datemax = datetime.date(2010, 1, 1) return units.AxisInfo( majloc=majloc, majfmt=majfmt, label='', default_limits=(datemin, datemax))
def axisinfo(unit, axis): 'return AxisInfo instance for x and unit' if unit == radians: return units.AxisInfo( majloc=ticker.MultipleLocator(base=np.pi/2), majfmt=ticker.FuncFormatter(rad_fn), label=unit.fullname, ) elif unit == degrees: return units.AxisInfo( majloc=ticker.AutoLocator(), majfmt=ticker.FormatStrFormatter(r'$%i^\circ$'), label=unit.fullname, ) elif unit is not None: if hasattr(unit, 'fullname'): return units.AxisInfo(label=unit.fullname) elif hasattr(unit, 'unit'): return units.AxisInfo(label=unit.unit.fullname) return None
def axisinfo(self, unit, axis): """ Return the `~matplotlib.units.AxisInfo`. The *unit* and *axis* arguments are required but not used. """ majloc = AutoTimedeltaLocator() majfmt = AutoTimedeltaFormatter(majloc, **self.formatter_args) datemin = datetime.timedelta(days=1) datemax = datetime.timedelta(days=2) return units.AxisInfo(majloc=majloc, majfmt=majfmt, label='', default_limits=(datemin, datemax))
def axisinfo(unit, axis): """: Returns information on how to handle an axis that has Epoch data. = INPUT VARIABLES - unit The units to use for a axis with Epoch data. = RETURN VALUE - Returns a matplotlib AxisInfo data structure that contains minor/major formatters, major/minor locators, and default label information. """ majloc = date_ticker.AutoDateLocator() majfmt = date_ticker.AutoDateFormatter(majloc) return units.AxisInfo(majloc=majloc, majfmt=majfmt, label=unit)
def axisinfo(unit, axis): """ Return the :class:`~matplotlib.units.AxisInfo` for *unit*. *unit* is a tzinfo instance or None. The *axis* argument is required but not used. """ tz = unit majloc = PandasAutoDateLocator(tz=tz) majfmt = PandasAutoDateFormatter(majloc, tz=tz) datemin = pydt.date(2000, 1, 1) datemax = pydt.date(2010, 1, 1) return units.AxisInfo(majloc=majloc, majfmt=majfmt, label='', default_limits=(datemin, datemax))
def test_numpy_facade(): # Create an instance of the conversion interface and # mock so we can check methods called qc = munits.ConversionInterface() def convert(value, unit, axis): if hasattr(value, 'units'): return value.to(unit).magnitude elif iterable(value): try: return [v.to(unit).magnitude for v in value] except AttributeError: return [ Quantity(v, axis.get_units()).to(unit).magnitude for v in value ] else: return Quantity(value, axis.get_units()).to(unit).magnitude qc.convert = MagicMock(side_effect=convert) qc.axisinfo = MagicMock(side_effect=lambda u, a: munits.AxisInfo(label=u)) qc.default_units = MagicMock(side_effect=lambda x, a: x.units) # Register the class munits.registry[Quantity] = qc # Simple test y = Quantity(np.linspace(0, 30), 'miles') x = Quantity(np.linspace(0, 5), 'hours') fig, ax = plt.subplots() fig.subplots_adjust(left=0.15) # Make space for label ax.plot(x, y, 'tab:blue') ax.axhline(Quantity(26400, 'feet'), color='tab:red') ax.axvline(Quantity(120, 'minutes'), color='tab:green') ax.yaxis.set_units('inches') ax.xaxis.set_units('seconds') assert qc.convert.called assert qc.axisinfo.called assert qc.default_units.called
def axisinfo(unit, axis): # docstring inherited # Delay-load due to circular dependencies. import matplotlib.testing.jpl_units as U # Check to see if the value used for units is a string unit value # or an actual instance of a UnitDbl so that we can use the unit # value for the default axis label value. if unit: label = unit if isinstance(unit, str) else unit.label() else: label = None if label == "deg" and isinstance(axis.axes, polar.PolarAxes): # If we want degrees for a polar plot, use the PolarPlotFormatter majfmt = polar.PolarAxes.ThetaFormatter() else: majfmt = U.UnitDblFormatter(useOffset=False) return units.AxisInfo(majfmt=majfmt, label=label)
def axisinfo(unit, axis): """ Return the :class:`~matplotlib.units.AxisInfo` for *unit*. *unit* is a tzinfo instance or None. The *axis* argument is required but not used. """ calendar, date_unit = unit majloc = NetCDFTimeDateLocator(4, calendar=calendar, date_unit=date_unit) majfmt = NetCDFTimeDateFormatter(majloc, calendar=calendar, time_units=date_unit) datemin = netcdftime.datetime(2000, 1, 1) datemax = netcdftime.datetime(2010, 1, 1) datemin.calendar = datemax.calendar = calendar return munits.AxisInfo(majloc=majloc, majfmt=majfmt, label='Testing', default_limits=(datemin, datemax))
def axisinfo(unit, axis): """Sets the default axis ticks and labels Parameters --------- unit : :class:`.UnitData` object string unit information for value axis : :class:`~matplotlib.Axis.axis` axis for which information is being set Returns ------- :class:~matplotlib.units.AxisInfo~ Information to support default tick labeling .. note: axis is not used """ # locator and formatter take mapping dict because # args need to be pass by reference for updates majloc = StrCategoryLocator(unit._mapping) majfmt = StrCategoryFormatter(unit._mapping) return units.AxisInfo(majloc=majloc, majfmt=majfmt)
def axisinfo(unit, axis): 'return the unit AxisInfo' # make sure that the axis does not start at 0 if axis: ax = axis.axes if axis is ax.get_xaxis(): xmin, xmax = ax.dataLim.intervalx if xmin == 0.: # no data has been added - let's set the default datalim. # We should probably use a better proxy for the datalim # have been updated than the ignore setting dmax = today = datetime.date.today() dmin = today - datetime.timedelta(days=10) ax._process_unit_info(xdata=(dmin, dmax)) dmin, dmax = ax.convert_xunits([dmin, dmax]) ax.viewLim.intervalx = dmin, dmax ax.dataLim.intervalx = dmin, dmax elif axis is ax.get_yaxis(): ymin, ymax = ax.dataLim.intervaly if ymin == 0.: # no data has been added - let's set the default datalim. # We should probably use a better proxy for the datalim # have been updated than the ignore setting dmax = today = datetime.date.today() dmin = today - datetime.timedelta(days=10) ax._process_unit_info(ydata=(dmin, dmax)) dmin, dmax = ax.convert_yunits([dmin, dmax]) ax.viewLim.intervaly = dmin, dmax ax.dataLim.intervaly = dmin, dmax majloc = AutoDateLocator(tz=unit) majfmt = AutoDateFormatter(majloc, tz=unit) return units.AxisInfo(majloc=majloc, majfmt=majfmt, label='')
def axisinfo(unit, axis): """: Returns information on how to handle an axis that has Epoch data. = INPUT VARIABLES - unit The units to use for a axis with Epoch data. = RETURN VALUE - Returns a matplotlib AxisInfo data structure that contains minor/major formatters, major/minor locators, and default label information. """ # Delay-load due to circular dependencies. import mplTest.units as U # Check to see if the value used for units is a string unit value # or an actual instance of a UnitDbl so that we can use the unit # value for the default axis label value. if (unit): if (isinstance(unit, str)): label = unit else: label = unit.label() else: label = None if (label == "rad"): # If the axis units are in radians, then use a special function for # applying format control. majfmt = ticker.FuncFormatter(rad_fn) elif (label == "deg") and isinstance(axis.axes, polar.PolarAxes): # If we want degrees for a polar plot, use the PolarPlotFormatter majfmt = polar.PolarAxes.ThetaFormatter() else: majfmt = U.UnitDblFormatter(useOffset=False) return units.AxisInfo(majfmt=majfmt, label=label)
def axisinfo(unit, axis): majloc = dates.AutoDateLocator() majfmt = dates.AutoDateFormatter(majloc) return units.AxisInfo(majloc=majloc, majfmt=majfmt)
def axisinfo(unit, axis): seq, locs = zip(*axis.unit_data) majloc = StrCategoryLocator(locs) majfmt = StrCategoryFormatter(seq) return units.AxisInfo(majloc=majloc, majfmt=majfmt)
def axisinfo(unit, axis): # docstring inherited majloc = date_ticker.AutoDateLocator() majfmt = date_ticker.AutoDateFormatter(majloc) return units.AxisInfo(majloc=majloc, majfmt=majfmt, label=unit)
def axisinfo(unit, axis): majloc = StrCategoryLocator(axis.unit_data.locs) majfmt = StrCategoryFormatter(axis.unit_data.seq) return units.AxisInfo(majloc=majloc, majfmt=majfmt)
def axisinfo(q_unit, axis): if axis.units is not None: if not q_unit.dimension == axis.units.dimension: raise DimensionError(q_unit.dimension, axis.units.dimension) return munits.AxisInfo(label='{}'.format(q_unit.symbol))