def peaks(*args): # z = peaks() # z = peaks(n) # z = peaks(x,y) n = 49 nargs = len(args) if nargs in (0,1): if nargs == 1: n = int(args[0]) x, y = ndgrid(linspace(-3,3,n),linspace(-3,3,n)) elif nargs == 2: x, y = args else: raise SyntaxError("Invalid number of arguments.") return 3*(1-x)**2*exp(-x**2-(y+1)**2) \ - 10*(x/5-x**3-y**5)*exp(-x**2-y**2) - 1/3*exp(-(x+1)**2-y**2)
def peaks(*args): # z = peaks() # z = peaks(n) # z = peaks(x,y) n = 49 nargs = len(args) if nargs in (0, 1): if nargs == 1: n = int(args[0]) x, y = ndgrid(linspace(-3, 3, n), linspace(-3, 3, n)) elif nargs == 2: x, y = args else: raise SyntaxError("Invalid number of arguments.") return 3*(1-x)**2*exp(-x**2-(y+1)**2) \ - 10*(x/5-x**3-y**5)*exp(-x**2-y**2) - 1/3*exp(-(x+1)**2-y**2)
def _add_bar_graph(self, item, shading='faceted'): if DEBUG: print "Adding a bar graph" # get data: x = squeeze(item.getp('xdata')) y = squeeze(item.getp('ydata')) # get line specifiactions: marker, color, style, width = self._get_linespecs(item) edgecolor = item.getp('edgecolor') if not edgecolor: edgecolor = 'k' # use black for now # FIXME: edgecolor should be same as ax.getp('fgcolor') by default facecolor = item.getp('facecolor') if not facecolor: facecolor = color opacity = item.getp('material').getp('opacity') if opacity is None: opacity = 1.0 if y.ndim == 1: y = reshape(y,(len(y),1)) nx, ny = shape(y) step = item.getp('barstepsize')/10 center = floor(ny/2) start = -step*center stop = step*center if not ny%2: start += step/2 stop -= step/2 a = linspace(start,stop,ny) barwidth = item.getp('barwidth')/10 hold_state = self._g.ishold() self._g.hold(True) colors = PlotProperties._colors + \ list(matplotlib.colors.cnames.values()) for j in range(ny): y_ = y[:,j] x_ = array(list(range(nx))) + a[j] - barwidth/2 if not facecolor: c = colors[j] else: c = facecolor self._g.bar(x_, y_, width=barwidth, color=c, ec=edgecolor, alpha=opacity) self._g.hold(hold_state) barticks = item.getp('barticks') if barticks is None: barticks = x if item.getp('rotated_barticks'): self._g.xticks(list(range(len(x))), barticks, rotation=90) else: self._g.xticks(list(range(len(x))), barticks)
def __init__( self, min=(0, 0), # minimum coordinates max=(1, 1), # maximum coordinates division=(4, 4), # cell divisions dirnames=('x', 'y', 'z')): # names of the directions """ Initialize a BoxGrid by giving domain range (minimum and maximum coordinates: min and max tuples/lists/arrays) and number of cells in each space direction (division tuple/list/array). The dirnames tuple/list holds the names of the coordinates in the various spatial directions. >>> g = UniformBoxGrid(min=0, max=1, division=10) >>> g = UniformBoxGrid(min=(0,-1), max=(1,1), division=(10,4)) >>> g = UniformBoxGrid(min=(0,0,-1), max=(2,1,1), division=(2,3,5)) """ # Allow int/float specifications in one-dimensional grids # (just turn to lists for later multi-dimensional processing) if isinstance(min, (int, float)): min = [min] if isinstance(max, (int, float)): max = [max] if isinstance(division, (int, float)): division = [division] if isinstance(dirnames, str): dirnames = [dirnames] self.nsd = len(min) # strip dirnames down to right space dim (in case the default # with three components were unchanged by the user): dirnames = dirnames[:self.nsd] # check consistent lengths: for a in max, division: if len(a) != self.nsd: raise ValueError( 'Incompatible lengths of arguments to constructor'\ ' (%d != %d)' % (len(a), self.nsd)) self.min_coor = array(min, float) self.max_coor = array(max, float) self.dirnames = dirnames self.division = division self.coor = [None] * self.nsd self.shape = [0] * self.nsd self.delta = zeros(self.nsd) for i in range(self.nsd): self.delta[i] = \ (self.max_coor[i] - self.min_coor[i])/float(self.division[i]) self.shape[i] = self.division[i] + 1 # no of grid points self.coor[i] = \ linspace(self.min_coor[i], self.max_coor[i], self.shape[i]) self._more_init()
def __init__(self, min=(0,0), # minimum coordinates max=(1,1), # maximum coordinates division=(4,4), # cell divisions dirnames=('x', 'y', 'z')): # names of the directions """ Initialize a BoxGrid by giving domain range (minimum and maximum coordinates: min and max tuples/lists/arrays) and number of cells in each space direction (division tuple/list/array). The dirnames tuple/list holds the names of the coordinates in the various spatial directions. >>> g = UniformBoxGrid(min=0, max=1, division=10) >>> g = UniformBoxGrid(min=(0,-1), max=(1,1), division=(10,4)) >>> g = UniformBoxGrid(min=(0,0,-1), max=(2,1,1), division=(2,3,5)) """ # Allow int/float specifications in one-dimensional grids # (just turn to lists for later multi-dimensional processing) if isinstance(min, (int,float)): min = [min] if isinstance(max, (int,float)): max = [max] if isinstance(division, (int,float)): division = [division] if isinstance(dirnames, str): dirnames = [dirnames] self.nsd = len(min) # strip dirnames down to right space dim (in case the default # with three components were unchanged by the user): dirnames = dirnames[:self.nsd] # check consistent lengths: for a in max, division: if len(a) != self.nsd: raise ValueError( 'Incompatible lengths of arguments to constructor'\ ' (%d != %d)' % (len(a), self.nsd)) self.min_coor = array(min, float) self.max_coor = array(max, float) self.dirnames = dirnames self.division = division self.coor = [None]*self.nsd self.shape = [0]*self.nsd self.delta = zeros(self.nsd) for i in range(self.nsd): self.delta[i] = \ (self.max_coor[i] - self.min_coor[i])/float(self.division[i]) self.shape[i] = self.division[i] + 1 # no of grid points self.coor[i] = \ linspace(self.min_coor[i], self.max_coor[i], self.shape[i]) self._more_init()
def flow(*args): # xx,yy,zz,vv = flow() # xx,yy,zz,vv = flow(n) # xx,yy,zz,vv = flow(xx,yy,zz) if len(args) == 0: xx, yy, zz = ndgrid(linspace(0.1, 10, 50), linspace(-3, 3, 25), linspace(-3, 3, 25), sparse=False) elif len(args) == 1: n = int(args[0]) xx, yy, zz = ndgrid(linspace(0.1, 10, 2 * n), linspace(-3, 3, n), linspace(-3, 3, n), sparse=False) elif len(args) == 3: xx, yy, zz = args else: raise SyntaxError("Invalid number of arguments.") # convert to spherical coordinates: theta = arctan2(zz, yy) phi = arctan2(xx, sqrt(yy**2 + zz**2)) r = sqrt(xx**2 + yy**2 + zz**2) rv = 2 / r * (3 / (2 - cos(phi))**2 - 1) phiv = -2 * sin(phi) / (2 - cos(phi)) / r thetav = zeros(shape(r)) # convert back to cartesian coordinates: xv = rv * cos(phiv) * cos(thetav) yv = rv * cos(phiv) * sin(thetav) zv = rv * sin(phiv) vv = log(sqrt(xv**2 + yv**2 + zv**2)) return xx, yy, zz, vv
def flow(*args): # xx,yy,zz,vv = flow() # xx,yy,zz,vv = flow(n) # xx,yy,zz,vv = flow(xx,yy,zz) if len(args) == 0: xx, yy, zz = ndgrid(linspace(0.1, 10, 50), linspace(-3, 3, 25), linspace(-3, 3, 25), sparse=False) elif len(args) == 1: n = int(args[0]) xx, yy, zz = ndgrid(linspace(0.1, 10, 2*n), linspace(-3, 3, n), linspace(-3, 3, n), sparse=False) elif len(args) == 3: xx, yy, zz = args else: raise SyntaxError("Invalid number of arguments.") # convert to spherical coordinates: theta = arctan2(zz, yy) phi = arctan2(xx, sqrt(yy**2 + zz**2)) r = sqrt(xx**2 + yy**2 + zz**2) rv = 2/r*(3/(2-cos(phi))**2 - 1) phiv = -2*sin(phi)/(2-cos(phi))/r thetav = zeros(shape(r)) # convert back to cartesian coordinates: xv = rv*cos(phiv)*cos(thetav) yv = rv*cos(phiv)*sin(thetav) zv = rv*sin(phiv) vv = log(sqrt(xv**2 + yv**2 + zv**2)) return xx, yy, zz, vv
def _add_bars(self, name, item, shading='faceted'): if DEBUG: print("Adding a bar graph") # get data: x = item.getp('xdata') y = item.getp('ydata') # get line specifiactions: marker, color, style, width = self._get_linespecs(item) if y.ndim == 1: y = reshape(y, (len(y), 1)) nx, ny = shape(y) barticks = item.getp('barticks') if barticks is None: barticks = list(range(nx)) xtics = ', '.join(['"%s" %d' % (m, i) for i, m in enumerate(barticks)]) if item.getp('rotated_barticks'): pass barwidth = item.getp('barwidth') / 10 edgecolor = item.getp('edgecolor') if not edgecolor: edgecolor = 'black' # use black for now # FIXME: edgecolor should be same as ax.getp('fgcolor') by default else: edgecolor = self._colors.get(edgecolor, 'black') if shading == 'faceted': pass else: pass facecolor = item.getp('facecolor') if not facecolor: facecolor = color facecolor = self._colors.get(facecolor, 'blue') # use blue as default step = item.getp('barstepsize') / 10 center = floor(ny / 2) start = -step * center stop = step * center if not ny % 2: start += step / 2 stop -= step / 2 a = linspace(start, stop, ny) self._g.configure(barmode="overlap") data = [] for j in range(ny): y_ = y[:, j] x_ = array(list(range(nx))) + a[j] curvename = '%s_bar%s' % (name, j) if not item.getp('linecolor') and not item.getp('facecolor'): color = 'black' else: color = facecolor self._g.bar_create(curvename, xdata=tuple(x_), ydata=tuple(y_), barwidth=barwidth, fg=color)