def __init__(self, xdata, ydata, options): """ Initializes base class Polygon. EXAMPLES:: sage: P = polygon([(0,0), (1,1), (-1,3)], thickness=2) sage: P[0].xdata [0.0, 1.0, -1.0] sage: P[0].options()['thickness'] 2 """ self.xdata = xdata self.ydata = ydata GraphicPrimitive_xydata.__init__(self, options)
def __init__(self, xdata, ydata, options): """ Initializes base class Point. EXAMPLES:: sage: P = point((3,4)) sage: P[0].xdata [3.0] sage: P[0].options()['alpha'] 1 """ self.xdata = xdata self.ydata = ydata GraphicPrimitive_xydata.__init__(self, options)
def _plot3d_options(self, options=None): """ Translate 2D plot options into 3D plot options. EXAMPLES:: sage: L = line([(1,1), (1,2), (2,2), (2,1)], alpha=.5, thickness=10, zorder=2) sage: l=L[0]; l Line defined by 4 points sage: m=l.plot3d(z=2) sage: m.texture.opacity 0.500000000000000 sage: m.thickness 10 sage: L = line([(1,1), (1,2), (2,2), (2,1)], linestyle=":") sage: L.plot3d() Traceback (most recent call last): NotImplementedError: Invalid 3d line style: ':' """ if options is None: options = dict(self.options()) options_3d = {} if 'thickness' in options: options_3d['thickness'] = options['thickness'] del options['thickness'] if 'zorder' in options: del options['zorder'] if 'linestyle' in options: if options['linestyle'] not in ('-', 'solid'): raise NotImplementedError("Invalid 3d line style: '%s'" % (options['linestyle'])) del options['linestyle'] options_3d.update( GraphicPrimitive_xydata._plot3d_options(self, options)) return options_3d
def _plot3d_options(self, options=None): """ Translate 2D plot options into 3D plot options. EXAMPLES:: sage: A=point((1,1),size=22) sage: a=A[0];a Point set defined by 1 point(s) sage: b=a.plot3d() sage: b.size 22 sage: b=a.plot3d(size=3) sage: b.size 3 """ if options is None: options = dict(self.options()) options_3d = {} if 'size' in options: options_3d['size'] = options['size'] del options['size'] if options.pop('faceted', False): raise NotImplementedError("3D points can not be faceted.") for o in ('marker', 'markeredgecolor'): # remove 2D options if o in options: del options[o] options_3d.update(GraphicPrimitive_xydata._plot3d_options(self, options)) return options_3d
def _plot3d_options(self, options=None): """ Translate 2D plot options into 3D plot options. EXAMPLES:: sage: A=point((1,1),size=22) sage: a=A[0];a Point set defined by 1 point(s) sage: b=a.plot3d() sage: b.size 22 sage: b=a.plot3d(size=3) sage: b.size 3 """ if options == None: options = dict(self.options()) options_3d = {} if 'size' in options: options_3d['size'] = options['size'] del options['size'] if 'faceted' in options: if options['faceted']: raise NotImplementedError, "No 3d faceted points." del options['faceted'] options_3d.update(GraphicPrimitive_xydata._plot3d_options(self, options)) return options_3d
def _plot3d_options(self, options=None): """ Translate 2D plot options into 3D plot options. EXAMPLES:: sage: A=point((1,1),size=22) sage: a=A[0];a Point set defined by 1 point(s) sage: b=a.plot3d() sage: b.size 22 sage: b=a.plot3d(size=3) sage: b.size 3 """ if options == None: options = dict(self.options()) options_3d = {} if 'size' in options: options_3d['size'] = options['size'] del options['size'] if 'faceted' in options: if options['faceted']: raise NotImplementedError, "No 3d faceted points." del options['faceted'] options_3d.update( GraphicPrimitive_xydata._plot3d_options(self, options)) return options_3d
def _plot3d_options(self, options=None): """ Translate 2D plot options into 3D plot options. EXAMPLES:: sage: L = line([(1,1), (1,2), (2,2), (2,1)], alpha=.5, thickness=10, zorder=2) sage: l=L[0]; l Line defined by 4 points sage: m=l.plot3d(z=2) sage: m.texture.opacity 0.500000000000000 sage: m.thickness 10 sage: L = line([(1,1), (1,2), (2,2), (2,1)], linestyle=":") sage: L.plot3d() Traceback (most recent call last): NotImplementedError: Invalid 3d line style: ':' """ if options is None: options = dict(self.options()) options_3d = {} if 'thickness' in options: options_3d['thickness'] = options['thickness'] del options['thickness'] if 'zorder' in options: del options['zorder'] if 'linestyle' in options: if options['linestyle'] not in ('-', 'solid'): raise NotImplementedError("Invalid 3d line style: '%s'"% (options['linestyle'])) del options['linestyle'] options_3d.update(GraphicPrimitive_xydata._plot3d_options(self, options)) return options_3d
def _plot3d_options(self, options=None): """ Translate 2D plot options into 3D plot options. EXAMPLES:: sage: A=point((1,1),size=22) sage: a=A[0];a Point set defined by 1 point(s) sage: b=a.plot3d() sage: b.size 22 sage: b=a.plot3d(size=3) sage: b.size 3 """ if options is None: options = dict(self.options()) options_3d = {} if 'size' in options: options_3d['size'] = options['size'] del options['size'] if options.pop('faceted', False): raise NotImplementedError("3D points cannot be faceted.") for o in ('marker', 'markeredgecolor'): # remove 2D options if o in options: del options[o] options_3d.update( GraphicPrimitive_xydata._plot3d_options(self, options)) return options_3d
def _plot3d_options(self, options=None): """ Updates ``BezierPath`` options to those allowed by 3D implementation. EXAMPLES:: sage: from sage.plot.bezier_path import BezierPath sage: B = BezierPath([[(0,0),(.5,.5),(1,0)],[(.5,1),(0,0)]],{'linestyle':'dashed'}) sage: B._plot3d_options() Traceback (most recent call last): ... NotImplementedError: Invalid 3d line style: dashed sage: B = BezierPath([[(0,0),(.5,.5),(1,0)],[(.5,1),(0,0)]],{'fill':False, 'thickness':2}) sage: B._plot3d_options() {'thickness': 2} """ if options == None: options = dict(self.options()) options_3d = {} if 'thickness' in options: options_3d['thickness'] = options['thickness'] del options['thickness'] if 'fill' in options: if options['fill']: raise NotImplementedError, "Invalid 3d fill style. Must set fill to False." del options['fill'] if 'linestyle' in options: if options['linestyle'] != 'solid': raise NotImplementedError, "Invalid 3d line style: %s" % options['linestyle'] del options['linestyle'] options_3d.update(GraphicPrimitive_xydata._plot3d_options(self, options)) return options_3d
def __init__(self, path, options): """ Returns a graphics primitive of a path of Bezier curves. EXAMPLES:: sage: from sage.plot.bezier_path import BezierPath sage: BezierPath([[(0,0),(.5,.5),(1,0)],[(.5,1),(0,0)]], {'linestyle':'dashed'}) Bezier path from (0.0, 0.0) to (0.0, 0.0) sage: BezierPath([[(0,0), (1,2), (3,6), (2,-1), (3,3)]], {}) Traceback (most recent call last): ... ValueError: invalid input for BezierPath TESTS: Check :trac:`31646`:: sage: from sage.plot.bezier_path import BezierPath sage: p2d = [[(3,0),(4,1),(2,1),(3,0)], [(2,2),(3,1),(2,1)]] sage: P = BezierPath(p2d, {}) sage: P.path [array([[3., 0.], [4., 1.], [2., 1.], [3., 0.]]), array([[2., 2.], [3., 1.], [2., 1.]])] """ import numpy as np self.path = [np.array(l, float) for l in path] # In oder to feed later to matplotlib.path.Path we convert in the following form # - vertices: an Nx2 float array of vertices # - codes: an N-length uint8 array of vertex types, or None # where each code could be MOVETO (=1), LINETO (=2), CURVE3 (=3), CURVE4 (=4) self.vertices = np.concatenate(self.path) N, _ = self.vertices.shape codes = np.zeros((N,), np.uint8) k = 0 for i, curve in enumerate(self.path): code = len(curve) + (i > 0) if code < 2 or code > 4: raise ValueError('invalid input for BezierPath') codes[k:k+len(curve)] = code k += len(curve) codes[0] = 1 # MOVETO self.codes = codes GraphicPrimitive_xydata.__init__(self, options)
def __init__(self, xdata, ydata, options): """ Initialize a line graphics primitive. EXAMPLES:: sage: from sage.plot.line import Line sage: Line([-1,2], [17,4], {'thickness':2}) Line defined by 2 points """ valid_options = self._allowed_options().keys() for opt in options.iterkeys(): if opt not in valid_options: raise RuntimeError("Error in line(): option '%s' not valid."%opt) self.xdata = xdata self.ydata = ydata GraphicPrimitive_xydata.__init__(self, options)
def __init__(self, xdata, ydata, options): """ Initialize a line graphics primitive. EXAMPLES:: sage: from sage.plot.line import Line sage: Line([-1,2], [17,4], {'thickness':2}) Line defined by 2 points """ valid_options = self._allowed_options() for opt in options: if opt not in valid_options: raise RuntimeError("Error in line(): option '%s' not valid." % opt) self.xdata = xdata self.ydata = ydata GraphicPrimitive_xydata.__init__(self, options)
def __init__(self, path, options): """ Returns a graphics primitive of a path of Bezier curves. EXAMPLES:: sage: from sage.plot.bezier_path import BezierPath sage: BezierPath([[(0,0),(.5,.5),(1,0)],[(.5,1),(0,0)]],{'linestyle':'dashed'}) Bezier path from (0, 0) to (0, 0) """ import numpy as np self.path = path codes = [1] + (len(self.path[0])-1)*[len(self.path[0])] vertices = self.path[0] for curve in self.path[1:]: vertices += curve codes += (len(curve))*[len(curve)+1] self.codes = codes self.vertices = np.array(vertices, np.float) GraphicPrimitive_xydata.__init__(self, options)
def _plot3d_options(self, options=None): """ Translate 2d plot options into 3d plot options. EXAMPLES:: sage: P = polygon([(1,1), (1,2), (2,2), (2,1)], alpha=.5) sage: p=P[0]; p Polygon defined by 4 points sage: q=p.plot3d() sage: q.texture.opacity 0.500000000000000 """ if options is None: options = dict(self.options()) for o in ['thickness', 'zorder', 'legend_label', 'fill']: options.pop(o, None) return GraphicPrimitive_xydata._plot3d_options(self, options)
def _plot3d_options(self, options=None): """ Translate 2d plot options into 3d plot options. EXAMPLES:: sage: P = polygon([(1,1), (1,2), (2,2), (2,1)], alpha=.5) sage: p=P[0]; p Polygon defined by 4 points sage: q=p.plot3d() sage: q.texture.opacity 0.5 """ if options is None: options = dict(self.options()) for o in ['thickness', 'zorder', 'legend_label', 'fill', 'edgecolor']: options.pop(o, None) return GraphicPrimitive_xydata._plot3d_options(self, options)