def projplot(self,*args,**kwds): """projplot is a wrapper around :func:`matplotlib.Axes.plot` to take into account the spherical projection. You can call this function as:: projplot(theta, phi) # plot a line going through points at coord (theta, phi) projplot(theta, phi, 'bo') # plot 'o' in blue at coord (theta, phi) projplot(thetaphi) # plot a line going through points at coord (thetaphi[0], thetaphi[1]) projplot(thetaphi, 'bx') # idem but with blue 'x' Parameters ---------- theta, phi : float, array-like Coordinates of point to plot. Can be put into one 2-d array, first line is then *theta* and second line is *phi*. See *lonlat* parameter for unit. fmt : str A format string (see :func:`matplotlib.Axes.plot` for details) lonlat : bool, optional If True, theta and phi are interpreted as longitude and latitude in degree, otherwise, as colatitude and longitude in radian coord : {'E', 'G', 'C', None} The coordinate system of the points, only used if the coordinate coordinate system of the Axes has been defined and in this case, a rotation is performed rot : None or sequence rotation to be applied =(lon, lat, psi) : lon, lat will be position of the new Z axis, and psi is rotation around this axis, all in degree. if None, no rotation is performed direct : bool if True, the rotation to center the projection is not taken into account Notes ----- Other keywords are passed to :func:`matplotlib.Axes.plot`. See Also -------- projscatter, projtext """ fmt = None if len(args) < 1: raise ValueError("No argument given") if len(args) == 1: theta,phi = np.asarray(args[0]) elif len(args) == 2: if type(args[1]) is str: fmt=args[1] theta,phi = np.asarray(args[0]) else: theta,phi = np.asarray(args[0]),np.asarray(args[1]) elif len(args) == 3: if type(args[2]) is not str: raise TypeError("Third argument must be a string") else: theta,phi = np.asarray(args[0]),np.asarray(args[1]) fmt = args[2] else: raise TypeError("Three args maximum") rot=kwds.pop('rot',None) if rot is not None: rot = np.array(np.atleast_1d(rot),copy=1) rot.resize(3) rot[1] = rot[1]-90. coord=self.proj.mkcoord(kwds.pop('coord',None))[::-1] lonlat=kwds.pop('lonlat',False) vec = R.dir2vec(theta,phi,lonlat=lonlat) vec = (R.Rotator(rot=rot,coord=coord,eulertype='Y')).I(vec) x,y = self.proj.vec2xy(vec,direct=kwds.pop('direct',False)) x,y = self._make_segment(x,y,threshold=kwds.pop('threshold', self._segment_threshold)) thelines = [] for xx,yy in zip(x,y): if fmt is not None: linestyle, marker, color = axes._process_plot_format(fmt) kwds.setdefault('linestyle',linestyle) kwds.setdefault('marker',marker) if color is not None: kwds.setdefault('color',color) l = lines.Line2D(xx,yy,**kwds) self.add_line(l) thelines.append(l) return thelines
def projplot(self,*args,**kwds): """projplot is a wrapper around :func:`matplotlib.Axes.plot` to take into account the spherical projection. You can call this function as:: projplot(theta, phi) # plot a line going through points at coord (theta, phi) projplot(theta, phi, 'bo') # plot 'o' in blue at coord (theta, phi) projplot(thetaphi) # plot a line going through points at coord (thetaphi[0], thetaphi[1]) projplot(thetaphi, 'bx') # idem but with blue 'x' Parameters ---------- theta, phi : float, array-like Coordinates of point to plot. Can be put into one 2-d array, first line is then *theta* and second line is *phi*. See *lonlat* parameter for unit. fmt : str A format string (see :func:`matplotlib.Axes.plot` for details) lonlat : bool, optional If True, theta and phi are interpreted as longitude and latitude in degree, otherwise, as colatitude and longitude in radian coord : {'E', 'G', 'C', None} The coordinate system of the points, only used if the coordinate coordinate system of the Axes has been defined and in this case, a rotation is performed rot : None or sequence rotation to be applied =(lon, lat, psi) : lon, lat will be position of the new Z axis, and psi is rotation around this axis, all in degree. if None, no rotation is performed direct : bool if True, the rotation to center the projection is not taken into account Notes ----- Other keywords are passed to :func:`matplotlib.Axes.plot`. See Also -------- projscatter, projtext """ fmt = None if len(args) < 1: raise ValueError("No argument given") if len(args) == 1: theta,phi = np.asarray(args[0]) elif len(args) == 2: if type(args[1]) is str: fmt=args[1] theta,phi = np.asarray(args[0]) else: theta,phi = np.asarray(args[0]),np.asarray(args[1]) elif len(args) == 3: if type(args[2]) is not str: raise TypeError("Third argument must be a string") else: theta,phi = np.asarray(args[0]),np.asarray(args[1]) fmt = args[2] else: raise TypeError("Three args maximum") rot=kwds.pop('rot',None) if rot is not None: rot = np.array(np.atleast_1d(rot),copy=1) rot.resize(3) rot[1] = rot[1]-90. coord=self.proj.mkcoord(kwds.pop('coord',None))[::-1] lonlat=kwds.pop('lonlat',False) vec = R.dir2vec(theta,phi,lonlat=lonlat) vec = (R.Rotator(rot=rot,coord=coord,eulertype='Y')).I(vec) x,y = self.proj.vec2xy(vec,direct=kwds.pop('direct',False)) x,y = self._make_segment(x,y,threshold=kwds.pop('threshold', self._segment_threshold)) thelines = [] for xx,yy in zip(x,y): if fmt is not None: try: # works in matplotlib 1.3 and earlier linestyle, marker, color = axes._process_plot_format(fmt) except: # matplotlib 1.4 and later linestyle, marker, color = axes._axes._process_plot_format(fmt) kwds.setdefault('linestyle',linestyle) kwds.setdefault('marker',marker) if color is not None: kwds.setdefault('color',color) l = lines.Line2D(xx,yy,**kwds) self.add_line(l) thelines.append(l) return thelines
def projplot(self,*args,**kwds): """projplot is a wrapper around Axes.plot to take into account the spherical projection. Modification of projplot vs plot: One, two or three args allowed: - if one arg: theta,phi = args[0][0],args[0][1] - if two : either theta,phi or [theta,phi],fmt - if three: theta,phi,fmt with fmt the format string. Additional keywords : - lonlat: if True, theta and phi are interpreted as longitude and latitude in degree, otherwise, as theta, phi in radian - coord: the coordinate system of the points, only used if the coordinate coordinate system of the Axes has been defined and in this case, a rotation is performed - rot: rotation to be applied =(a,b,c) : a,b will be position of the new Z axis, and c is rotation around this axis, all in degree. if None, no rotation is performed - direct: if True, the rotation to center the projection is not taken into account """ fmt = None if len(args) < 1: raise ValueError("No argument given") if len(args) == 1: theta,phi = npy.asarray(args[0]) elif len(args) == 2: if type(args[1]) is str: fmt=args[1] theta,phi = npy.asarray(args[0]) else: theta,phi = npy.asarray(args[0]),npy.asarray(args[1]) elif len(args) == 3: if type(args[2]) is not str: raise TypeError("Third argument must be a string") else: theta,phi = npy.asarray(args[0]),npy.asarray(args[1]) fmt = args[2] else: raise TypeError("Three args maximum") rot=kwds.pop('rot',None) if rot is not None: rot = npy.array(npy.atleast_1d(rot),copy=1) rot.resize(3) rot[1] = rot[1]-90. coord=self.proj.mkcoord(kwds.pop('coord',None))[::-1] lonlat=kwds.pop('lonlat',False) vec = R.dir2vec(theta,phi,lonlat=lonlat) vec = (R.Rotator(rot=rot,coord=coord,eulertype='Y')).I(vec) x,y = self.proj.vec2xy(vec,direct=kwds.pop('direct',False)) x,y = self._make_segment(x,y,threshold=kwds.pop('threshold', self._segment_threshold)) thelines = [] for xx,yy in zip(x,y): if fmt is not None: linestyle, marker, color = axes._process_plot_format(fmt) kwds.setdefault('linestyle',linestyle) kwds.setdefault('marker',marker) if color is not None: kwds.setdefault('color',color) l = lines.Line2D(xx,yy,**kwds) self.add_line(l) thelines.append(l) return thelines
def projplot(self, *args, **kwds): """projplot is a wrapper around Axes.plot to take into account the spherical projection. Modification of projplot vs plot: One, two or three args allowed: - if one arg: theta,phi = args[0][0],args[0][1] - if two : either theta,phi or [theta,phi],fmt - if three: theta,phi,fmt with fmt the format string. Additional keywords : - lonlat: if True, theta and phi are interpreted as longitude and latitude in degree, otherwise, as theta, phi in radian - coord: the coordinate system of the points, only used if the coordinate coordinate system of the Axes has been defined and in this case, a rotation is performed - rot: rotation to be applied =(a,b,c) : a,b will be position of the new Z axis, and c is rotation around this axis, all in degree. if None, no rotation is performed - direct: if True, the rotation to center the projection is not taken into account """ fmt = None if len(args) < 1: raise ValueError("No argument given") if len(args) == 1: theta, phi = npy.asarray(args[0]) elif len(args) == 2: if type(args[1]) is str: fmt = args[1] theta, phi = npy.asarray(args[0]) else: theta, phi = npy.asarray(args[0]), npy.asarray(args[1]) elif len(args) == 3: if type(args[2]) is not str: raise TypeError("Third argument must be a string") else: theta, phi = npy.asarray(args[0]), npy.asarray(args[1]) fmt = args[2] else: raise TypeError("Three args maximum") rot = kwds.pop('rot', None) if rot is not None: rot = npy.array(npy.atleast_1d(rot), copy=1) rot.resize(3) rot[1] = rot[1] - 90. coord = self.proj.mkcoord(kwds.pop('coord', None))[::-1] lonlat = kwds.pop('lonlat', False) vec = R.dir2vec(theta, phi, lonlat=lonlat) vec = (R.Rotator(rot=rot, coord=coord, eulertype='Y')).I(vec) x, y = self.proj.vec2xy(vec, direct=kwds.pop('direct', False)) x, y = self._make_segment(x, y, threshold=kwds.pop('threshold', self._segment_threshold)) thelines = [] for xx, yy in zip(x, y): if fmt is not None: linestyle, marker, color = axes._process_plot_format(fmt) kwds.setdefault('linestyle', linestyle) kwds.setdefault('marker', marker) if color is not None: kwds.setdefault('color', color) l = lines.Line2D(xx, yy, **kwds) self.add_line(l) thelines.append(l) return thelines