def makeshapes(x, y, type=None, z=None, m=None): """ Make shapes by x and y coordinates. :param x: (*array_like*) X coordinates. :param y: (*array_like*) Y coordinates. :param type: (*string*) Shape type [point | line | polygon]. :param z: (*array_like*) Z coordinates. :param m: (*array_like*) M coordinates. :returns: Shapes """ shapes = [] if isinstance(x, (int, float)): shape = PointShape() shape.setPoint(PointD(x, y)) shapes.append(shape) else: x = np.asarray(x)._array y = np.asarray(y)._array if not z is None: if m is None: m = np.zeros(len(z))._array else: m = np.asarray(m)._array z = np.asarray(z)._array if type == 'point': if z is None: shapes = ShapeUtil.createPointShapes(x, y) else: shapes = ShapeUtil.createPointShapes(x, y, z, m) elif type == 'line': if z is None: shapes = ShapeUtil.createPolylineShapes(x, y) else: shapes = ShapeUtil.createPolylineShapes(x, y, z, m) elif type == 'polygon': if z is None: shapes = ShapeUtil.createPolygonShapes(x, y) else: shapes = ShapeUtil.createPolygonShape(x, y, z, m) return shapes
def load_data(module_path, data_file_name): """Loads data from module_path/data/data_file_name. Parameters ---------- module_path : string The module path. data_file_name : string Name of csv file to be loaded from module_path/data/data_file_name. For example 'wine_data.csv'. Returns ------- data : Numpy array A 2D array with each row representing one sample and each column representing the features of a given sample. target : Numpy array A 1D array holding target variables for all the samples in `data. For example target[0] is the target varible for data[0]. target_names : Numpy array A 1D array containing the names of the classifications. For example target_names[0] is the name of the target[0] class. """ with open(os.path.join(module_path, 'data', data_file_name)) as csv_file: data_file = csv.reader(csv_file) temp = next(data_file) n_samples = int(temp[0]) n_features = int(temp[1]) target_names = np.array(temp[2:]) data = np.empty((n_samples, n_features)) target = np.empty((n_samples, ), dtype=np.dtype.int) for i, ir in enumerate(data_file): data[i] = np.asarray(ir[:-1], dtype=np.dtype.float64) target[i] = np.asarray(ir[-1], dtype=np.dtype.int) return data, target, target_names
def bar(self, x, y, z, width=0.8, bottom=None, cylinder=False, **kwargs): """ Make a 3D bar plot of x, y and z, where x, y and z are sequence like objects of the same lengths. :param x: (*array_like*) Input x data. :param y: (*array_like*) Input y data. :param z: (*array_like*) Input z data. :param width: (*float*) Bar width. :param cylinder: (*bool*) Is sylinder bar or rectangle bar. :param bottom: (*bool*) Color of the points. Or z vlaues. :param color: (*Color*) Optional, the color of the bar faces. :param edgecolor: (*Color*) Optional, the color of the bar edge. Default is black color. Edge line will not be plotted if ``edgecolor`` is ``None``. :param linewidth: (*int*) Optional, width of bar edge. :param label: (*string*) Label of the bar series. :param hatch: (*string*) Hatch string. :param hatchsize: (*int*) Hatch size. Default is None (8). :param bgcolor: (*Color*) Background color, only valid with hatch. :param barswidth: (*float*) Bars width (0 - 1), only used for automatic bar with plot (only one argument widthout ``width`` augument). Defaul is 0.8. :returns: Points legend break. """ #Add data series label = kwargs.pop('label', 'S_0') xdata = plotutil.getplotdata(x) ydata = plotutil.getplotdata(y) zdata = plotutil.getplotdata(z) autowidth = False width = np.asarray(width) if not bottom is None: bottom = plotutil.getplotdata(bottom) #Set plot data styles fcobj = kwargs.pop('color', None) if fcobj is None: fcobj = kwargs.pop('facecolor', 'b') if isinstance(fcobj, (tuple, list)): colors = plotutil.getcolors(fcobj) else: color = plotutil.getcolor(fcobj) colors = [color] ecobj = kwargs.pop('edgecolor', 'k') edgecolor = plotutil.getcolor(ecobj) linewidth = kwargs.pop('linewidth', 1.0) hatch = kwargs.pop('hatch', None) hatch = plotutil.gethatch(hatch) hatchsize = kwargs.pop('hatchsize', None) bgcolor = kwargs.pop('bgcolor', None) bgcolor = plotutil.getcolor(bgcolor) ecolor = kwargs.pop('ecolor', 'k') ecolor = plotutil.getcolor(ecolor) barbreaks = [] for color in colors: lb = BarBreak() lb.setCaption(label) lb.setColor(color) if edgecolor is None: lb.setDrawOutline(False) else: lb.setOutlineColor(edgecolor) lb.setOutlineSize(linewidth) if not hatch is None: lb.setStyle(hatch) if not bgcolor is None: lb.setBackColor(bgcolor) if not hatchsize is None: lb.setStyleSize(hatchsize) lb.setErrorColor(ecolor) barbreaks.append(lb) #Create bar graphics if isinstance(width, NDArray): width = width.asarray() if cylinder: graphics = GraphicFactory.createCylinderBars3D( xdata, ydata, zdata, autowidth, width, bottom, barbreaks) else: graphics = GraphicFactory.createBars3D(xdata, ydata, zdata, autowidth, width, bottom, barbreaks) self.add_graphic(graphics) return barbreaks
def streamslice(self, *args, **kwargs): """ Plot stream lines slice in 3D axes. :param x: (*array_like*) X coordinate array. :param y: (*array_like*) Y coordinate array. :param z: (*array_like*) Z coordinate array. :param u: (*array_like*) U component of the arrow vectors (wind field). :param v: (*array_like*) V component of the arrow vectors (wind field). :param w: (*array_like*) W component of the arrow vectors (wind field). :param xslice: (*list*) X slice locations. :param yslice: (*list*) Y slice locations. :param zslice: (*list*) Z slice locations. :param density: (*int*) Streamline density. Default is 4. :return: Streamline slices """ ls = kwargs.pop('symbolspec', None) cmap = plotutil.getcolormap(**kwargs) density = kwargs.pop('density', 4) iscolor = False cdata = None if len(args) < 6: u = args[0] v = args[1] w = args[2] u = np.asarray(u) nz, ny, nx = u.shape x = np.arange(nx) y = np.arange(ny) z = np.arange(nz) args = args[3:] else: x = args[0] y = args[1] z = args[2] u = args[3] v = args[4] w = args[5] args = args[6:] if len(args) > 0: cdata = args[0] iscolor = True args = args[1:] x = plotutil.getplotdata(x) y = plotutil.getplotdata(y) z = plotutil.getplotdata(z) u = plotutil.getplotdata(u) v = plotutil.getplotdata(v) w = plotutil.getplotdata(w) if ls is None: if iscolor: if len(args) > 0: cn = args[0] ls = LegendManage.createLegendScheme( cdata.min(), cdata.max(), cn, cmap) else: levs = kwargs.pop('levs', None) if levs is None: ls = LegendManage.createLegendScheme( cdata.min(), cdata.max(), cmap) else: if isinstance(levs, NDArray): levs = levs.tolist() ls = LegendManage.createLegendScheme( cdata.min(), cdata.max(), levs, cmap) else: if cmap.getColorCount() == 1: c = cmap.getColor(0) else: c = Color.black ls = LegendManage.createSingleSymbolLegendScheme( ShapeTypes.Polyline, c, 1) ls = plotutil.setlegendscheme_line(ls, **kwargs) if not kwargs.has_key('headwidth'): kwargs['headwidth'] = 1 if not kwargs.has_key('headlength'): kwargs['headlength'] = 2.5 for i in range(ls.getBreakNum()): lb = plotutil.line2stream(ls.getLegendBreak(i), **kwargs) ls.setLegendBreak(i, lb) if not cdata is None: cdata = plotutil.getplotdata(cdata) min_points = kwargs.pop('min_points', 3) zslice_index = kwargs.pop('zslice_index', None) if zslice_index is None: xslice = kwargs.pop('xslice', []) if isinstance(xslice, numbers.Number): xslice = [xslice] yslice = kwargs.pop('yslice', []) if isinstance(yslice, numbers.Number): yslice = [yslice] zslice = kwargs.pop('zslice', []) if isinstance(zslice, numbers.Number): zslice = [zslice] graphics = GraphicFactory.streamSlice(x, y, z, u, v, w, cdata, xslice, yslice, zslice, density, ls) else: if isinstance(zslice_index, int): zslice_index = [zslice_index] graphics = GraphicFactory.streamSlice(x, y, z, u, v, w, cdata, zslice_index, density, ls) lighting = kwargs.pop('lighting', None) if not lighting is None: for gg in graphics: gg.setUsingLight(lighting) visible = kwargs.pop('visible', True) if visible: for gg in graphics: self.add_graphic(gg) return graphics
def streamplot(self, *args, **kwargs): """ Plot stream lines in 3D axes. :param x: (*array_like*) X coordinate array. :param y: (*array_like*) Y coordinate array. :param z: (*array_like*) Z coordinate array. :param u: (*array_like*) U component of the arrow vectors (wind field). :param v: (*array_like*) V component of the arrow vectors (wind field). :param w: (*array_like*) W component of the arrow vectors (wind field). :param density: (*int*) Streamline density. Default is 4. :return: Streamlines """ ls = kwargs.pop('symbolspec', None) cmap = plotutil.getcolormap(**kwargs) density = kwargs.pop('density', 4) iscolor = False cdata = None if len(args) < 6: u = args[0] v = args[1] w = args[2] u = np.asarray(u) nz, ny, nx = u.shape x = np.arange(nx) y = np.arange(ny) z = np.arange(nz) args = args[3:] else: x = args[0] y = args[1] z = args[2] u = args[3] v = args[4] w = args[5] args = args[6:] if len(args) > 0: cdata = args[0] iscolor = True args = args[1:] x = plotutil.getplotdata(x) y = plotutil.getplotdata(y) z = plotutil.getplotdata(z) u = plotutil.getplotdata(u) v = plotutil.getplotdata(v) w = plotutil.getplotdata(w) if ls is None: if iscolor: if len(args) > 0: cn = args[0] ls = LegendManage.createLegendScheme( cdata.min(), cdata.max(), cn, cmap) else: levs = kwargs.pop('levs', None) if levs is None: ls = LegendManage.createLegendScheme( cdata.min(), cdata.max(), cmap) else: if isinstance(levs, NDArray): levs = levs.tolist() ls = LegendManage.createLegendScheme( cdata.min(), cdata.max(), levs, cmap) else: if cmap.getColorCount() == 1: c = cmap.getColor(0) else: c = Color.black ls = LegendManage.createSingleSymbolLegendScheme( ShapeTypes.Polyline, c, 1) ls = plotutil.setlegendscheme_line(ls, **kwargs) if not kwargs.has_key('headwidth'): kwargs['headwidth'] = 1 if not kwargs.has_key('headlength'): kwargs['headlength'] = 2.5 for i in range(ls.getBreakNum()): lb = plotutil.line2stream(ls.getLegendBreak(i), **kwargs) ls.setLegendBreak(i, lb) if not cdata is None: cdata = plotutil.getplotdata(cdata) min_points = kwargs.pop('min_points', 3) start_x = kwargs.pop('start_x', None) start_y = kwargs.pop('start_y', None) start_z = kwargs.pop('start_z', None) if start_x is None or start_y is None or start_z is None: graphics = GraphicFactory.createStreamlines3D( x, y, z, u, v, w, cdata, density, ls, min_points) else: start_x = np.asarray(start_x).flatten() start_y = np.asarray(start_y).flatten() start_z = np.asarray(start_z).flatten() graphics = GraphicFactory.createStreamlines3D( x, y, z, u, v, w, cdata, density, ls, min_points, start_x._array, start_y._array, start_z._array) lighting = kwargs.pop('lighting', None) if not lighting is None: graphics.setUsingLight(lighting) self.add_graphic(graphics) return graphics