def draw(self, clear=None, update=None): # obsolete kwargs clear, update (unused) just kept for compatibility GRWidget.draw(self, clear, update) gr.setwsviewport(0, self.mwidth, 0, self.mheight) gr.setwswindow(0, self.sizex, 0, self.sizey) for plot in self._lstPlot: plot.sizex, plot.sizey = self.sizex, self.sizey plot.drawGR() # logDomainCheck logXinDomain = plot.logXinDomain() logYinDomain = plot.logYinDomain() if logXinDomain != self._logXinDomain: self._logXinDomain = logXinDomain self.logXinDomain.emit(self._logXinDomain) if logYinDomain != self._logYinDomain: self._logYinDomain = logYinDomain self.logYinDomain.emit(self._logYinDomain) if self._pickEvent: event = self._pickEvent gr.setviewport(*event.viewportscaled) wcPoint = event.getWC(event.viewport) window = gr.inqwindow() gr.setwindow(*event.getWindow()) gr.setmarkertype(gr.MARKERTYPE_PLUS) gr.polymarker([wcPoint.x], [wcPoint.y]) gr.setwindow(*window)
def draw(self, clear=None, update=None): # obsolete kwargs clear, update (unused) just kept for compatibility GRWidget.draw(self, clear, update) gr.setwsviewport(0, self.mwidth, 0, self.mheight) gr.setwswindow(0, self.sizex, 0, self.sizey) for plot in self._lstPlot: plot.sizex, plot.sizey = self.sizex, self.sizey plot.drawGR() # logDomainCheck logXinDomain = plot.logXinDomain() logYinDomain = plot.logYinDomain() if logXinDomain != self._logXinDomain: self._logXinDomain = logXinDomain self.logXinDomain.emit(self._logXinDomain) if logYinDomain != self._logYinDomain: self._logYinDomain = logYinDomain self.logYinDomain.emit(self._logYinDomain) if self._pickEvent: event = self._pickEvent gr.setviewport(*event.viewport) wcPoint = event.getWC(event.viewport) window = gr.inqwindow() gr.setwindow(*event.getWindow()) gr.setmarkertype(gr.MARKERTYPE_PLUS) gr.polymarker([wcPoint.x], [wcPoint.y]) gr.setwindow(*window)
def draw_image(self): if not self.needs_refresh: return self.needs_refresh = False w, h = (self.w, self.h) clearws() setwindow(0, self.w, 0, self.h) setviewport(0, 1, 0, 1) setbackgroundcolor(1, 1, 1, 0) vertices, normals = triangulate(data, \ (1.0/64, 1.0/64, 1.0/128), (-0.5, -0.5, -0.5), self.isolevel) mesh = createmesh(len(vertices)*3, vertices, normals, \ ones(vertices.shape)) drawmesh(mesh, 1, (0,0,0), (0,0,1), (0,1,0), (1,1,1), (1,1,1)) center = spherical_to_cartesian(-2, pi*self.y/self.h+pi/2, pi*self.x/self.w) up = spherical_to_cartesian(1, pi*self.y/self.h+pi, pi*self.x/self.w) cameralookat(center[0], center[1], -0.25+center[2], 0, 0, -0.25, up[0], up[1], up[2]) drawimage(0, self.w, 0, self.h, \ self.w, self.h, GR3_Drawable.GR3_DRAWABLE_GKS) if self.export: export("mri.html", 800, 800) print("Saved current isosurface to mri.html") self.export = False clear() deletemesh(c_int(mesh.value))
def draw(self, clear=False, update=True): if clear: gr.clearws() gr.setwsviewport(0, self.mwidth, 0, self.mheight) gr.setwswindow(0, self.sizex, 0, self.sizey) for plot in self._lstPlot: plot.sizex, plot.sizey = self.sizex, self.sizey plot.drawGR() # logDomainCheck logXinDomain = plot.logXinDomain() logYinDomain = plot.logYinDomain() if logXinDomain != self._logXinDomain: self._logXinDomain = logXinDomain self.logXinDomain.emit(self._logXinDomain) if logYinDomain != self._logYinDomain: self._logYinDomain = logYinDomain self.logYinDomain.emit(self._logYinDomain) if self._pickEvent: event = self._pickEvent gr.setviewport(*event.viewport) wcPoint = event.getWC(event.viewport) window = gr.inqwindow() gr.setwindow(*event.getWindow()) gr.setmarkertype(gr.MARKERTYPE_PLUS) gr.polymarker([wcPoint.x], [wcPoint.y]) gr.setwindow(*window)
def draw_path(self, gc, path, transform, rgbFace=None): path = transform.transform_path(path) points = path.vertices codes = path.codes bbox = gc.get_clip_rectangle() if bbox is not None and not np.any(np.isnan(bbox.bounds)): x, y, w, h = bbox.bounds clrt = np.array([x, x + w, y, y + h]) else: clrt = np.array([0, self.width, 0, self.height]) gr.setviewport(*clrt / self.size) gr.setwindow(*clrt) if rgbFace is not None and len(points) > 2: color = gr.inqcolorfromrgb(rgbFace[0], rgbFace[1], rgbFace[2]) gr.settransparency(rgbFace[3]) gr.setcolorrep(color, rgbFace[0], rgbFace[1], rgbFace[2]) gr.setfillintstyle(gr.INTSTYLE_SOLID) gr.setfillcolorind(color) gr.drawpath(points, codes, fill=True) lw = gc.get_linewidth() if lw != 0: rgba = gc.get_rgb()[:4] color = gr.inqcolorfromrgb(rgba[0], rgba[1], rgba[2]) gr.settransparency(rgba[3]) gr.setcolorrep(color, rgba[0], rgba[1], rgba[2]) if isinstance(gc._linestyle, str): gr.setlinetype(linetype[gc._linestyle]) gr.setlinewidth(lw) gr.setlinecolorind(color) gr.drawpath(points, codes, fill=False)
def draw(self, event): self.bm = wx.EmptyBitmap(self.GetSizeTuple()[0], self.GetSizeTuple()[1]) dc = wx.MemoryDC(self.bm) os.environ['GKSconid'] = "%x!%x" % (get_address(repr(self)), get_address(repr(dc))) dc.SetBackground(wx.WHITE_BRUSH) dc.Clear() dc.DrawText("Surface Plot using wxWidgets ...", 15, 15) x = range(1, 481) y = range(1, 481) w, h, d = gr.readimage( os.path.join(os.path.dirname(os.path.realpath(__file__)), 'surf.png')) z = map(lambda x: x & 0xff, d) gr.setviewport(0, 1, 0, 1) gr.setwindow(1, 480, 1, 480) gr.setspace(1, 1000, 30, 80) gr.setcolormap(3) gr.surface(x, y, z, 6) gr.contour(x, y, range(1), z, 0) gr.updatews() self.Refresh() event.Skip()
def double_pendulum(theta, length, mass): gr.clearws() gr.setviewport(0, 1, 0, 1) direction = [] position = [(0, 0, 0)] for i in range(2): direction.append( (sin(theta[i]) * length[i] * 2, -cos(theta[i]) * length[i] * 2, 0)) position.append([position[-1][j] + direction[-1][j] for j in range(3)]) gr3.clear() # draw pivot point gr3.drawcylindermesh(1, (0, 0.2, 0), (0, 1, 0), (0.4, 0.4, 0.4), 0.4, 0.05) gr3.drawcylindermesh(1, (0, 0.2, 0), (0, -1, 0), (0.4, 0.4, 0.4), 0.05, 0.2) gr3.drawspheremesh(1, (0, 0, 0), (0.4, 0.4, 0.4), 0.05) # draw rods gr3.drawcylindermesh(2, position, direction, (0.6, 0.6, 0.6) * 2, (0.05, 0.05), [l * 2 for l in length]) # draw bobs gr3.drawspheremesh(2, position[1:], (1, 1, 1) * 2, [m * 0.2 for m in mass]) gr3.drawimage(0, 1, 0, 1, 500, 500, gr3.GR3_Drawable.GR3_DRAWABLE_GKS) gr.updatews() return
def draw_path(self, gc, path, transform, rgbFace=None): path = transform.transform_path(path) points = path.vertices codes = path.codes bbox = gc.get_clip_rectangle() if bbox is not None: x, y, w, h = bbox.bounds clrt = np.array([x, x + w, y, y + h]) else: clrt = np.array([0, self.width, 0, self.height]) gr.setviewport(*clrt / self.size) gr.setwindow(*clrt) if rgbFace is not None and len(points) > 2: color = gr.inqcolorfromrgb(rgbFace[0], rgbFace[1], rgbFace[2]) gr.settransparency(rgbFace[3]) gr.setcolorrep(color, rgbFace[0], rgbFace[1], rgbFace[2]) gr.setfillintstyle(gr.INTSTYLE_SOLID) gr.setfillcolorind(color) gr.drawpath(points, codes, fill=True) lw = gc.get_linewidth() if lw != 0: rgba = gc.get_rgb()[:4] color = gr.inqcolorfromrgb(rgba[0], rgba[1], rgba[2]) gr.settransparency(rgba[3]) gr.setcolorrep(color, rgba[0], rgba[1], rgba[2]) if isinstance(gc._linestyle, str): gr.setlinetype(linetype[gc._linestyle]) gr.setlinewidth(lw) gr.setlinecolorind(color) gr.drawpath(points, codes, fill=False)
def expose(self, widget, event): cr = widget.window.cairo_create() environ["GKS_WSTYPE"] = "142" pc = PyCairoContext.from_address(id(cr)) environ['GKSconid'] = "%lu" % pc.ctx cr.move_to(15, 15) cr.set_font_size(14) cr.show_text("Contour Plot using Gtk ...") seed(0) xd = uniform(-2, 2, 100) yd = uniform(-2, 2, 100) zd = xd * np.exp(-xd**2 - yd**2) gr.setviewport(0.15, 0.95, 0.1, 0.9) gr.setwindow(-2, 2, -2, 2) gr.setspace(-0.5, 0.5, 0, 90) gr.setmarkersize(1) gr.setmarkertype(gr.MARKERTYPE_SOLID_CIRCLE) gr.setcharheight(0.024) gr.settextalign(2, 0) gr.settextfontprec(3, 0) x, y, z = gr.gridit(xd, yd, zd, 200, 200) h = np.linspace(-0.5, 0.5, 20) gr.surface(x, y, z, 5) gr.contour(x, y, h, z, 0) gr.polymarker(xd, yd) gr.axes(0.25, 0.25, -2, -2, 2, 2, 0.01) gr.updatews()
def draw_image(self): if not self.needs_refresh: return self.needs_refresh = False gr.clearws() gr.setwindow(0, self.w, 0, self.h) gr.setviewport(0, 1, 0, 1) gr3.setbackgroundcolor(1, 1, 1, 0) vertices, normals = gr3.triangulate(data, (1.0 / 64, 1.0 / 64, 1.0 / 128), (-0.5, -0.5, -0.5), self.isolevel) mesh = gr3.createmesh( len(vertices) * 3, vertices, normals, np.ones(vertices.shape)) gr3.drawmesh(mesh, 1, (0, 0, 0), (0, 0, 1), (0, 1, 0), (1, 1, 1), (1, 1, 1)) center = spherical_to_cartesian(-2, np.pi * self.y / self.h + np.pi / 2, np.pi * self.x / self.w) up = spherical_to_cartesian(1, np.pi * self.y / self.h + np.pi, np.pi * self.x / self.w) gr3.cameralookat(center[0], center[1], -0.25 + center[2], 0, 0, -0.25, up[0], up[1], up[2]) gr3.drawimage(0, self.w, 0, self.h, self.w, self.h, gr3.GR3_Drawable.GR3_DRAWABLE_GKS) if self.export: gr3.export("mri.html", 800, 800) print("Saved current isosurface to mri.html") self.export = False gr3.clear() gr3.deletemesh(c_int(mesh.value))
def draw_image(self): w, h = (self.w, self.h) clearws() setwindow(0, self.w, 0, self.h) setviewport(0, 1, 0, 1) setbackgroundcolor(1, 1, 1, 0) vertices, normals = triangulate(data, \ (1.0/64, 1.0/64, 1.0/128), (-0.5, -0.5, -0.5), self.isolevel) mesh = createmesh(len(vertices)*3, vertices, normals, \ ones(vertices.shape)) drawmesh(mesh, 1, (0, 0, 0), (0, 0, 1), (0, 1, 0), (1, 1, 1), (1, 1, 1)) center = spherical_to_cartesian(-2, pi * self.y / self.h + pi / 2, pi * self.x / self.w) up = spherical_to_cartesian(1, pi * self.y / self.h + pi, pi * self.x / self.w) cameralookat(center[0], center[1], -0.25 + center[2], 0, 0, -0.25, up[0], up[1], up[2]) drawimage(0, self.w, 0, self.h, \ self.w, self.h, GR3_Drawable.GR3_DRAWABLE_GKS) if self.export: export("mri.html", 800, 800) print("Saved current isosurface to mri.html") self.export = False clear() deletemesh(c_int(mesh.value))
def _set_viewport(kind, subplot): global _plt metric_width, metric_height, pixel_width, pixel_height = gr.inqdspsize() if 'figsize' in _plt.kwargs: horizontal_pixels_per_inch = pixel_width * 0.0254 / metric_width vertical_pixels_per_inch = pixel_height * 0.0254 / metric_height width = _plt.kwargs['figsize'][0] * horizontal_pixels_per_inch height = _plt.kwargs['figsize'][1] * vertical_pixels_per_inch else: width, height = _plt.kwargs['size'] viewport = [0, 0, 0, 0] vp = subplot[:] if width > height: aspect_ratio = height/width metric_size = metric_width * width / pixel_width gr.setwsviewport(0, metric_size, 0, metric_size*aspect_ratio) gr.setwswindow(0, 1, 0, aspect_ratio) vp[2] *= aspect_ratio vp[3] *= aspect_ratio else: aspect_ratio = width/ height metric_size = metric_height * height / pixel_height gr.setwsviewport(0, metric_size * aspect_ratio, 0, metric_size) gr.setwswindow(0, aspect_ratio, 0, 1) vp[0] *= aspect_ratio vp[1] *= aspect_ratio viewport[0] = vp[0] + 0.125 * (vp[1]-vp[0]) viewport[1] = vp[0] + 0.925 * (vp[1]-vp[0]) viewport[2] = vp[2] + 0.125 * (vp[3]-vp[2]) viewport[3] = vp[2] + 0.925 * (vp[3]-vp[2]) if width > height: viewport[2] += (1 - (subplot[3] - subplot[2])**2) * 0.02 if kind in ('wireframe', 'surface', 'plot3', 'scatter3'): viewport[1] -= 0.0525 if kind in ('contour', 'contourf', 'surface'): viewport[1] -= 0.1 gr.setviewport(*viewport) _plt.kwargs['viewport'] = viewport _plt.kwargs['vp'] = vp _plt.kwargs['ratio'] = aspect_ratio if 'backgroundcolor' in _plt.kwargs: gr.savestate() gr.selntran(0) gr.setfillintstyle(gr.INTSTYLE_SOLID) gr.setfillcolorind(_plt.kwargs['backgroundcolor']) if width > height: gr.fillrect(subplot[0], subplot[1], subplot[2] * aspect_ratio, subplot[3] * aspect_ratio) else: gr.fillrect(subplot[0] * aspect_ratio, subplot[1] * aspect_ratio, subplot[2], subplot[3]) gr.selntran(1) gr.restorestate()
def plot_domain(color_func, f, re=(-1, 1), im=(-1, 1), N=100, n=15): w = func_vals(f, re, im, N) domc = color_func(w, n) * 255 width, height = domc.shape[:2] domc = np.append(domc, np.ones((width, height, 1)) * 255, axis=2) domc = domc.astype(np.uint8) domc = domc.view('<i4') gr.clearws() gr.setviewport(0, 1, 0, 1) gr.drawimage(0, 1, 0, 1, width, height, domc, model=gr.MODEL_HSV) gr.updatews()
def plot_domain(color_func, f, re=[-1, 1], im=[-1, 1], N=100, n=15): w = func_vals(f, re, im, N) domc = color_func(w, n) * 255 width, height = domc.shape[:2] domc = np.append(domc, np.ones((width, height, 1)) * 255, axis=2) domc = domc.astype(np.uint8) domc = domc.view("<i4") gr.clearws() gr.setviewport(0, 1, 0, 1) gr.drawimage(0, 1, 0, 1, width, height, domc, model=gr.MODEL_HSV) gr.updatews()
def __init__(self, dpi): self.dpi = dpi self.width = 640.0 * dpi / 80 self.height = 480.0 * dpi / 80 mwidth, mheight, width, height = gr.inqdspsize() if (width / (mwidth / 0.0256) < 200): mwidth *= self.width / width gr.setwsviewport(0, mwidth, 0, mwidth * 0.75) else: gr.setwsviewport(0, 0.192, 0, 0.144) gr.setwswindow(0, 1, 0, 0.75) gr.setviewport(0, 1, 0, 0.75) gr.setwindow(0, self.width, 0, self.height) self.mathtext_parser = MathTextParser('agg') self.texmanager = TexManager()
def draw(self): gr.clearws() gr.setwswindow(0, self._sizex, 0, self._sizey) gr.setviewport(0, self._sizex, 0, self._sizey) if self._projection == 'perspective': gr.setperspectiveprojection(near_plane=0.1, far_plane=1000, fov=15) else: gr.setorthographicprojection(left=-60, right=60, bottom=-60, top=60, near_plane=-60, far_plane=60) gr.axes3d(10, 10, 10, 50, 50, 0, 2, 2, 2, -0.0075) self.update()
def configure(self): aspect_ratio = self.width / self.height if aspect_ratio > 1: rect = np.array([0, 1, 0, 1.0 / aspect_ratio]) self.size = self.width else: rect = np.array([0, aspect_ratio, 0, 1]) self.size = self.height mwidth, mheight, width, height = gr.inqdspsize() if width / (mwidth / 0.0256) < 200: mwidth *= self.width / width gr.setwsviewport(*rect * mwidth) else: gr.setwsviewport(*rect * 0.192) gr.setwswindow(*rect) gr.setviewport(*rect) gr.setwindow(0, self.width, 0, self.height)
def pendulum(t, theta, omega, acceleration): gr.clearws() gr.setviewport(0, 1, 0, 1) x, y = (sin(theta) * 3.0, -cos(theta) * 3.0) gr3.clear() # draw pivot point gr3.drawspheremesh(1, (0, 0, 0), (0.4, 0.4, 0.4), 0.1) # draw rod gr3.drawcylindermesh(1, (0, 0, 0), (x, y, 0), (0.6, 0.6, 0.6), 0.05, 3.0) # draw sphere gr3.drawspheremesh(1, (x, y, 0), (1, 1, 1), 0.25) # show angular velocity V = 0.3 * omega - sign(omega) * 0.15 gr3.drawcylindermesh(1, (x, y, 0), (cos(theta), sin(theta), 0), (0, 0, 1), 0.05, V) gr3.drawconemesh(1, (x + cos(theta) * V, y + sin(theta) * V, 0), (-y, x, 0), (0, 0, 1), 0.1, sign(omega) * 0.25) # show angular acceleration A = 0.3 * acceleration gr3.drawcylindermesh(1, (x, y, 0), (sin(theta), cos(theta), 0), (1, 0, 0), 0.05, A) gr3.drawconemesh(1, (x + sin(theta) * A, y + cos(theta) * A, 0), (x, -y, 0), (1, 0, 0), 0.1, 0.25) # draw GR3 objects gr3.drawimage(0, 1, 0.15, 0.85, 500, 350, gr3.GR3_Drawable.GR3_DRAWABLE_GKS) gr.settextfontprec(2, gr.TEXT_PRECISION_STRING) gr.setcharheight(0.024) gr.settextcolorind(1) gr.textext(0.05, 0.96, 'Damped Pendulum') gr.mathtex(0.05, 0.9, '\\omega=\\dot{\\theta}') gr.mathtex(0.05, 0.83, '\\dot{\\omega}=-\\gamma\\omega-\\frac{g}{l}sin(\\theta)') gr.setcharheight(0.020) gr.textext(0.05, 0.20, 't:%7.2f' % t) gr.textext(0.05, 0.16, '\\theta:%7.2f' % (theta / pi * 180)) gr.settextcolorind(4) gr.textext(0.05, 0.12, '\\omega:%7.2f' % omega) gr.settextcolorind(2) gr.textext(0.05, 0.08, 'y_{A}:%6.2f' % acceleration) gr.updatews() return
def draw(self, wsviewport=None): if self.xvalues is not None and self.widths is not None: maxidx = np.argmax(self.xvalues) rangex = (self.xvalues.min(), self.xvalues[maxidx] + self.widths[maxidx]) else: rangex = (0.0, 100.0) if self.yvalues is not None: rangey = gr.adjustrange(0.0, self.yvalues.max()) else: rangey = (0.0, 8.0) if wsviewport is None: gr.setwsviewport(0, self.mwidth, 0, self.mheight) else: gr.setwsviewport(*wsviewport) gr.setwswindow(0, self.sizex, 0, self.sizey) gr.setviewport(0.075 * self.sizex, 0.95 * self.sizex, 0.075 * self.sizey, 0.95 * self.sizey) gr.setwindow(rangex[0], rangex[1], rangey[0], rangey[1]) gr.setcharheight(0.012) gr.setfillintstyle(1) gr.setfillcolorind(0) gr.fillrect(rangex[0], rangex[1], rangey[0], rangey[1]) if self.xvalues is not None and self.yvalues is not None \ and self.widths is not None: gr.setfillintstyle(1) gr.setfillcolorind(2) for i in range(self.xvalues.size): gr.fillrect(self.xvalues[i], self.xvalues[i] + self.widths[i] * 0.8, 0.0, self.yvalues[i]) else: gr.text(0.45 * self.sizex, 0.5 * self.sizey, "no data") gr.setlinecolorind(1) xtick = floor(0.02 * (rangex[1] - rangey[0]) * 100.0) / 100.0 ytick = floor(0.04 * (rangey[1] - rangey[0]) * 50.0) / 50.0 gr.axes(xtick, ytick, rangex[0], rangey[0], 10, 5, 0.0075) gr.axes(xtick, ytick, rangex[1], rangey[1], -10, -5, -0.0075) if self.title is not None: gr.text(0.8 * self.sizex, 0.9 * self.sizey, self.title)
def draw(self): if not self._draw_graphics: return x = range(0, 128) y = range(0, 128) z = readfile(os.path.join(os.path.dirname(os.path.realpath(__file__)), "kws.dat"), separator="$") zrange = max(z) - min(z) h = [min(z) + i * 0.025 * zrange for i in range(0, 40)] gr.setviewport(0.075, 0.95, 0.075, 0.95) gr.setwindow(1, 128, 1, 128) gr.setspace(min(z), max(z), 0, 90) gr.setcharheight(0.018) gr.setcolormap(-3) gr.surface(x, y, z, 5) gr.contour(x, y, h, z, -1) gr.axes(5, 5, 1, 1, 2, 2, 0.0075)
def pendulum(theta, length, mass): l = length[0] + length[1] gr.clearws() gr.setviewport(0, 1, 0, 1) gr.setwindow(-l, l, -l, l) gr.setmarkertype(gr.MARKERTYPE_SOLID_CIRCLE) gr.setmarkercolorind(86) pivot = [0, 0.775] # draw pivot point gr.fillarea([-0.2, 0.2, 0.2, -0.2], [0.75, 0.75, 0.8, 0.8]) for i in range(2): x = [pivot[0], pivot[0] + sin(theta[i]) * length[i]] y = [pivot[1], pivot[1] - cos(theta[i]) * length[i]] gr.polyline(x, y) # draw rod gr.setmarkersize(3 * mass[i]) gr.polymarker([x[1]], [y[1]]) # draw bob pivot = [x[1], y[1]] gr.updatews() return
def draw(self): if not self._draw_graphics: return x = range(0, 128) y = range(0, 128) z = readfile(os.path.join(os.path.dirname(os.path.realpath(__file__)), "kws.dat"), separator='$') zrange = max(z) - min(z) h = [min(z) + i * 0.025 * zrange for i in range(0, 40)] gr.setviewport(0.075, 0.95, 0.075, 0.95) gr.setwindow(1, 128, 1, 128) gr.setspace(min(z), max(z), 0, 90) gr.setcharheight(0.018) gr.setcolormap(-3) gr.surface(x, y, z, 5) gr.contour(x, y, h, z, -1) gr.axes(5, 5, 1, 1, 2, 2, 0.0075)
def pendulum(t, theta, omega, acceleration): gr.clearws() gr.setviewport(0, 1, 0, 1) x = [0.5, 0.5 + np.sin(theta) * 0.4] y = [0.8, 0.8 - np.cos(theta) * 0.4] # draw pivot point gr.fillarea([0.46, 0.54, 0.54, 0.46], [0.79, 0.79, 0.81, 0.81]), gr.setlinecolorind(1) gr.setlinewidth(2) gr.polyline(x, y) # draw rod gr.setmarkersize(5) gr.setmarkertype(gr.MARKERTYPE_SOLID_CIRCLE) gr.setmarkercolorind(86) gr.polymarker([x[1]], [y[1]]) # draw bob gr.setlinecolorind(4) V = 0.05 * omega # show angular velocity gr.drawarrow(x[1], y[1], x[1] + V * np.cos(theta), y[1] + V * np.sin(theta)) gr.setlinecolorind(2) A = 0.05 * acceleration # show angular acceleration gr.drawarrow(x[1], y[1], x[1] + A * np.sin(theta), y[1] + A * np.cos(theta)) gr.settextfontprec(2, gr.TEXT_PRECISION_STRING) gr.setcharheight(0.032) gr.settextcolorind(1) gr.textext(0.05, 0.95, 'Damped Pendulum') gr.setcharheight(0.040) gr.mathtex(0.4, 0.22, '\\omega=\\dot{\\theta}') gr.mathtex(0.4, 0.1, '\\dot{\\omega}=-\\gamma\\omega-\\frac{g}{l}sin(\\theta)') gr.setcharheight(0.028) gr.textext(0.05, 0.22, 't:%7.2f' % t) gr.textext(0.05, 0.16, '\\theta:%7.2f' % (theta / np.pi * 180)) gr.settextcolorind(4) gr.textext(0.05, 0.10, '\\omega:%7.2f' % omega) gr.settextcolorind(2) gr.textext(0.05, 0.04, 'y_{A}:%6.2f' % acceleration) gr.updatews()
def write(self, image, device_pixel_ratio=1): height, width = image.shape[:2] gr.clearws() if width > height: xmax = 1.0 ymax = 1.0*height/width else: xmax = 1.0*width/height ymax = 1.0 metric_width, metric_height, pixel_width, pixel_height = gr.inqdspsize() meter_per_horizontal_pixel = metric_width/pixel_width meter_per_vertical_pixel = metric_height/pixel_height gr.setwsviewport(0, meter_per_horizontal_pixel*width*device_pixel_ratio, 0, meter_per_vertical_pixel*height*device_pixel_ratio) gr.setwswindow(0, xmax, 0, ymax) gr.setviewport(0, xmax, 0, ymax) gr.setwindow(0, xmax, 0, ymax) gr.drawimage(0, xmax, 0, ymax, width*device_pixel_ratio, height*device_pixel_ratio, image.view('uint32')) gr.updatews()
def pendulum(t, theta, omega, acceleration): gr.clearws() gr.setviewport(0, 1, 0, 1) x = [0.5, 0.5 + sin(theta) * 0.4] y = [0.8, 0.8 - cos(theta) * 0.4] # draw pivot point gr.fillarea([0.46, 0.54, 0.54, 0.46], [0.79, 0.79, 0.81, 0.81]), gr.setlinecolorind(1) gr.setlinewidth(2) gr.polyline(x, y) # draw rod gr.setmarkersize(5) gr.setmarkertype(gr.MARKERTYPE_SOLID_CIRCLE) gr.setmarkercolorind(86) gr.polymarker([x[1]], [y[1]]) # draw bob gr.setlinecolorind(4) V = 0.05 * omega # show angular velocity gr.drawarrow(x[1], y[1], x[1] + V*cos(theta), y[1] + V*sin(theta)) gr.setlinecolorind(2) A = 0.05 * acceleration # show angular acceleration gr.drawarrow(x[1], y[1], x[1] + A*sin(theta), y[1] + A*cos(theta)) gr.settextfontprec(2, gr.TEXT_PRECISION_STRING) gr.setcharheight(0.032) gr.settextcolorind(1) gr.textext(0.05, 0.95, 'Damped Pendulum') gr.setcharheight(0.040) gr.mathtex(0.4, 0.22, '\\omega=\\dot{\\theta}') gr.mathtex(0.4, 0.1, '\\dot{\\omega}=-\\gamma\\omega-\\frac{g}{l}sin(\\theta)') gr.setcharheight(0.028) gr.textext(0.05, 0.22, 't:%7.2f' % t) gr.textext(0.05, 0.16, '\\theta:%7.2f' % (theta / pi * 180)) gr.settextcolorind(4) gr.textext(0.05, 0.10, '\\omega:%7.2f' % omega) gr.settextcolorind(2) gr.textext(0.05, 0.04, 'y_{A}:%6.2f' % acceleration) gr.updatews()
def _colorbar(off=0.0, colors=256): global _plt gr.savestate() viewport = _plt.kwargs['viewport'] zmin, zmax = _plt.kwargs['zrange'] gr.setwindow(0, 1, zmin, zmax) gr.setviewport(viewport[1] + 0.02 + off, viewport[1] + 0.05 + off, viewport[2], viewport[3]) l = [1000+int(255*i/(colors-1)) for i in range(colors)] gr.cellarray(0, 1, zmax, zmin, 1, colors, l) diag = ((viewport[1] - viewport[0])**2 + (viewport[3] - viewport[2])**2)**0.5 charheight = max(0.016 * diag, 0.012) gr.setcharheight(charheight) if _plt.kwargs['scale'] & gr.OPTION_Z_LOG: gr.setscale(gr.OPTION_Y_LOG) gr.axes(0, 2, 1, zmin, 0, 1, 0.005) else: ztick = 0.5 * gr.tick(zmin, zmax) gr.axes(0, ztick, 1, zmin, 0, 1, 0.005) gr.restorestate()
def draw(self, wsviewport=None): if self.xvalues is not None: rangex = (self.xvalues.min(), self.xvalues.max()) else: rangex = (0, 10) if self.yvalues is not None: rangey = gr.adjustrange(self.yvalues.min(), self.yvalues.max()) else: rangey = (0, 4) if wsviewport is None: gr.setwsviewport(0, self.mwidth, 0, self.mheight) else: gr.setwsviewport(*wsviewport) gr.setwswindow(0, self.sizex, 0, self.sizey) gr.setviewport(0.075 * self.sizex, 0.95 * self.sizex, 0.075 * self.sizey, 0.95 * self.sizey) gr.setwindow(rangex[0], rangex[1], rangey[0], rangey[1]) gr.setcharheight(0.012) gr.setfillintstyle(1) gr.setfillcolorind(0) gr.fillrect(rangex[0], rangex[1], rangey[0], rangey[1]) if self.xvalues is not None and self.yvalues is not None: gr.setlinecolorind(2) gr.polyline(self.xvalues, self.yvalues) else: gr.text(0.4 * self.sizex, 0.5 * self.sizey, "no elements selected") gr.setlinecolorind(1) gr.axes(0.2, 0.2, rangex[0], rangey[0], 5, 5, 0.0075) gr.axes(0.2, 0.2, rangex[1], rangey[1], -5, -5, -0.0075) if self.title is not None: gr.text(0.8 * self.sizex, 0.9 * self.sizey, self.title)
def write(self, image, device_pixel_ratio=1): height, width = image.shape[:2] gr.clearws() if width > height: xmax = 1.0 ymax = 1.0 * height / width else: xmax = 1.0 * width / height ymax = 1.0 metric_width, metric_height, pixel_width, pixel_height = gr.inqdspsize() meter_per_horizontal_pixel = metric_width / pixel_width meter_per_vertical_pixel = metric_height / pixel_height gr.setwsviewport( 0, meter_per_horizontal_pixel * width * device_pixel_ratio, 0, meter_per_vertical_pixel * height * device_pixel_ratio, ) gr.setwswindow(0, xmax, 0, ymax) gr.setviewport(0, xmax, 0, ymax) gr.setwindow(0, xmax, 0, ymax) gr.drawimage(0, xmax, 0, ymax, width * device_pixel_ratio, height * device_pixel_ratio, image.view("uint32")) gr.updatews()
spectrum = np.zeros((256, 256), dtype=float) t = -255 dt = float(SAMPLES) / FS df = FS / float(SAMPLES) / 2 / 2 start = time.time() while time.time() - start < 10: try: power = get_spectrum() except (IOError): continue gr.clearws() spectrum[:, 255] = power[:256] spectrum = np.roll(spectrum, 1) gr.setcolormap(-113) gr.setviewport(0.05, 0.95, 0.1, 1) gr.setwindow(t * dt, (t + 255) * dt, 0, df) gr.setscale(gr.OPTION_FLIP_X) gr.setspace(0, 200, 30, 80) gr3.surface((t + np.arange(256)) * dt, np.linspace(0, df, 256), spectrum, 4) gr.setscale(0) gr.axes3d(0.2, 0.2, 0, (t + 255) * dt, 0, 0, 5, 5, 0, -0.01) gr.titles3d('t [s]', 'f [kHz]', '') gr.updatews() t += 1
import gr import scipy.fftpack SAMPLES = 2048 wf = wave.open( os.path.join(os.path.dirname(os.path.realpath(__file__)), 'Monty_Python.wav'), 'rb') pa = pyaudio.PyAudio() stream = pa.open(format=pa.get_format_from_width(wf.getsampwidth()), channels=wf.getnchannels(), rate=wf.getframerate(), output=True) gr.setwindow(0, SAMPLES, -30000, 30000) gr.setviewport(0.05, 0.95, 0.05, 0.95) gr.setlinecolorind(218) gr.setfillintstyle(1) gr.setfillcolorind(208) data = wf.readframes(SAMPLES) while data != '' and len(data) == SAMPLES * wf.getsampwidth(): stream.write(data) amplitudes = numpy.fromstring(data, dtype=numpy.short) power = abs(scipy.fftpack.fft(amplitudes / 512.0))[:SAMPLES / 2:2] - 30000 gr.clearws() gr.fillrect(0, SAMPLES, -30000, 30000) gr.grid(40, 1200, 0, 0, 5, 5) gr.polyline(range(SAMPLES)[0::4], amplitudes[0::4]) gr.polyline(range(SAMPLES)[0::4], power)
from gr.pygr import Plot, PlotAxes, PlotCurve, Text if __name__ == "__main__": tx, ty = 0, -20 x = [-3.3 + t * 0.1 for t in range(66)] y = [t ** 5 - 13 * t ** 3 + 36 * t for t in x] txtfmt = "Text drawn on\n(%g, %g) with\nhalign left, valign top" plt = Plot((0.1, 0.95, 0.1, 0.88)) plt.title = "Text on Axes Example" plt.subTitle = "Show usage of gr.pygr.Text" plt.xlabel = "x" plt.ylabel = "y" curve = PlotCurve(x, y, legend="foo bar") axes = PlotAxes(plt.viewport).addCurves(curve) axes.setWindow(-4.0, 4.0, -60.0, 40.0) text = Text(tx, -ty, txtfmt % (tx, -ty), axes, 0.02) plt.addAxes(axes) text2 = Text(tx, ty, txtfmt % (tx, ty), axes, 0.02) tbx, tby = text2.getBoundingBox() plt.drawGR() text.drawGR() text2.drawGR() # set viewport and window accordingly to draw in NDC space gr.setviewport(0, axes.sizex, 0, axes.sizey) gr.setwindow(0, axes.sizex, 0, axes.sizey) gr.fillarea(tbx, tby)
import gr import gr3 gr.setviewport(0, 1, 0, 1) for i in range(360): gr.clearws() gr3.clear() gr3.drawmolecule('dna.xyz', bond_delta=2, tilt=45, rotation=i) gr3.drawimage(0, 1, 0, 1, 500, 500, gr3.GR3_Drawable.GR3_DRAWABLE_GKS) gr.settextcolorind(0) gr.settextalign(gr.TEXT_HALIGN_CENTER, gr.TEXT_VALIGN_TOP) gr.text(0.5, 1, "DNA rendered using gr3.drawmolecule") gr.updatews()
angles = np.load('700K_460.npy') lens = [] gr.setregenflags(gr.MPL_POSTPONE_UPDATE) for t in range(100): plt.cla() fig = plt.subplot(133) fig.xaxis.set_ticks([-100, 0, 100]) fig.yaxis.set_ticks([]) plt.ylim([0, 1000]) plt.hist(angles[t], 20, normed=0, facecolor='g', alpha=0.5) plt.show() gr.setviewport(0, 0.7, 0, 0.7) gr.setwindow(0.1, 0.9, 0.05, 0.85) mogli.draw(molecules[t], bonds_param=1.15, camera=((60, 0, 0), (0, 0, 0), (0, 1, 0))) gr.settextalign(gr.TEXT_HALIGN_CENTER, gr.TEXT_VALIGN_HALF) gr.text(0.35, 0.7, '700K (%.1f ps) # of bonds: %d' % (t / 10.0, len(angles[t]))) lens.append(len(angles[t])) if t > 0: gr.setwindow(0, 10, 3500, 5000) gr.setviewport(0.1, 0.6, 0.05, 0.1) gr.axes(1, 0, 0, 3500, 2, 0, 0.005) gr.polyline(np.arange(t + 1) / 10.0, lens)
def init_plot_window(xmin, xmax, ymin, ymax): gr.clearws() gr.setwsviewport(0.0, 0.25, 0.0, 0.25) # Desktop window extents in meters gr.setviewport(0.15, 0.95, 0.15, 0.95) gr.setwindow(xmin, xmax, ymin, ymax)
#!/usr/bin/env python """ Create a contour plot of irregular distributed data """ from numpy.random import uniform, seed import numpy as np import gr seed(0) xd = uniform(-2, 2, 100) yd = uniform(-2, 2, 100) zd = xd * np.exp(-xd ** 2 - yd ** 2) gr.setviewport(0.1, 0.95, 0.1, 0.95) gr.setwindow(-2, 2, -2, 2) gr.setspace(-0.5, 0.5, 0, 90) gr.setmarkersize(1) gr.setmarkertype(gr.MARKERTYPE_SOLID_CIRCLE) gr.setcharheight(0.024) gr.settextalign(2, 0) gr.settextfontprec(3, 0) x, y, z = gr.gridit(xd, yd, zd, 200, 200) h = np.linspace(-0.5, 0.5, 20) gr.surface(x, y, z, 5) gr.contour(x, y, h, z, 0) gr.polymarker(xd, yd) gr.axes(0.25, 0.25, -2, -2, 2, 2, 0.01) gr.updatews()
from gr.pygr import Plot, PlotAxes, PlotCurve, Text tx, ty = 0, -20 x = [-3.3 + t * .1 for t in range(66)] y = [t**5 - 13 * t**3 + 36 * t for t in x] txtfmt = "Text drawn on\n(%g, %g) with\nhalign left, valign top" plt = Plot((.1, .95, .1, .88)) plt.title = "Text on Axes Example" plt.subTitle = "Show usage of gr.pygr.Text" plt.xlabel = "x" plt.ylabel = "y" curve = PlotCurve(x, y, legend="foo bar") axes = PlotAxes(plt.viewport).addCurves(curve) axes.setWindow(-4.0, 4.0, -60.0, 40.0) text = Text(tx, -ty, txtfmt % (tx, -ty), axes, .02) plt.addAxes(axes) text2 = Text(tx, ty, txtfmt % (tx, ty), axes, .02) tbx, tby = text2.getBoundingBox() plt.drawGR() text.drawGR() text2.drawGR() # set viewport and window accordingly to draw in NDC space gr.setviewport(0, axes.sizex, 0, axes.sizey) gr.setwindow(0, axes.sizex, 0, axes.sizey) gr.fillarea(tbx, tby) gr.updatews()
return abs(np.fft.fft(amplitudes / 32768.0))[:SAMPLES/2] spectrum = np.zeros((256, 256), dtype=float) t = -255 dt = float(SAMPLES) / FS df = FS / float(SAMPLES) / 2 / 2 start = time.time() while time.time() - start < 10: try: power = get_spectrum() except (IOError): continue gr.clearws() spectrum[:, 255] = power[:256] spectrum = np.roll(spectrum, 1) gr.setcolormap(-113) gr.setviewport(0.05, 0.95, 0.1, 1) gr.setwindow(t * dt, (t + 255) * dt, 0, df) gr.setscale(gr.OPTION_FLIP_X) gr.setspace(0, 200, 30, 80) gr3.surface((t + np.arange(256)) * dt, np.linspace(0, df, 256), spectrum, 4) gr.setscale(0) gr.axes3d(0.2, 0.2, 0, (t + 255) * dt, 0, 0, 5, 5, 0, -0.01) gr.titles3d('t [s]', 'f [kHz]', '') gr.updatews() t += 1
def _set_viewport(kind, subplot): global _plt metric_width, metric_height, pixel_width, pixel_height = gr.inqdspsize() if 'figsize' in _plt.kwargs: horizontal_pixels_per_inch = pixel_width * 0.0254 / metric_width vertical_pixels_per_inch = pixel_height * 0.0254 / metric_height width = _plt.kwargs['figsize'][0] * horizontal_pixels_per_inch height = _plt.kwargs['figsize'][1] * vertical_pixels_per_inch else: dpi = pixel_width / metric_width * 0.0254 if dpi > 200: width, height = tuple(x * dpi / 100 for x in _plt.kwargs['size']) else: width, height = _plt.kwargs['size'] viewport = [0, 0, 0, 0] vp = subplot[:] if width > height: aspect_ratio = height/width metric_size = metric_width * width / pixel_width gr.setwsviewport(0, metric_size, 0, metric_size*aspect_ratio) gr.setwswindow(0, 1, 0, aspect_ratio) vp[2] *= aspect_ratio vp[3] *= aspect_ratio else: aspect_ratio = width/ height metric_size = metric_height * height / pixel_height gr.setwsviewport(0, metric_size * aspect_ratio, 0, metric_size) gr.setwswindow(0, aspect_ratio, 0, 1) vp[0] *= aspect_ratio vp[1] *= aspect_ratio viewport[0] = vp[0] + 0.125 * (vp[1]-vp[0]) viewport[1] = vp[0] + 0.925 * (vp[1]-vp[0]) viewport[2] = vp[2] + 0.125 * (vp[3]-vp[2]) viewport[3] = vp[2] + 0.925 * (vp[3]-vp[2]) if width > height: viewport[2] += (1 - (subplot[3] - subplot[2])**2) * 0.02 if kind in ('wireframe', 'surface', 'plot3', 'scatter3', 'trisurf'): viewport[1] -= 0.0525 if kind in ('contour', 'contourf', 'surface', 'trisurf', 'heatmap', 'hexbin'): viewport[1] -= 0.1 gr.setviewport(*viewport) _plt.kwargs['viewport'] = viewport _plt.kwargs['vp'] = vp _plt.kwargs['ratio'] = aspect_ratio if 'backgroundcolor' in _plt.kwargs: gr.savestate() gr.selntran(0) gr.setfillintstyle(gr.INTSTYLE_SOLID) gr.setfillcolorind(_plt.kwargs['backgroundcolor']) if width > height: gr.fillrect(subplot[0], subplot[1], subplot[2] * aspect_ratio, subplot[3] * aspect_ratio) else: gr.fillrect(subplot[0] * aspect_ratio, subplot[1] * aspect_ratio, subplot[2], subplot[3]) gr.selntran(1) gr.restorestate() if kind == 'polar': x_min, x_max, y_min, y_max = viewport x_center = 0.5 * (x_min + x_max) y_center = 0.5 * (y_min + y_max) r = 0.5 * min(x_max - x_min, y_max - y_min) gr.setviewport(x_center - r, x_center + r, y_center - r, y_center + r)
if args.output is not None: os.environ["GKS_VIDEO_OPTS"] = "2000x2000" os.environ["GKS_WSTYPE"] = args.output[-3:] os.environ["GKS_FILEPATH"] = args.output if args.filename.endswith('.xyz'): molecules = mogli.read(args.filename) elif args.filename.endswith('.npz'): fixs = np.array([args.fixx,args.fixy,args.fixz]) molecules = mogli.load(args.filename,args.name,args.smile,args.scaling,fixs) if args.fix_bond: bonds_method = 'fix_bond' bonds_param = args.smile else: bonds_method = 'radii' bonds_param = args.bond for t in range(args.batch): print(str(t)+" of "+str(args.batch)) gr.clearws() gr.setviewport(0, 0.7, 0, 0.7) gr.setwindow(0.1, 0.9, 0.05, 0.85) #mogli.draw(molecules[t], bonds_param=args.bond, camera=((12, 0, 12),(0, 0, 0),(0, 1, 0))) mogli.draw(molecules[t], width=500, height=500, bonds_method=bonds_method,bonds_param=bonds_param, camera=((args.camera_distance, 0, args.camera_distance),(0, 0, 0),(0, 1, 0))) #mogli.draw(molecules[t], bonds_method=bonds_method,bonds_param=bonds_param, camera=((12, 0, 12),(0, 0, 0),(0, 1, 0))) gr.updatews()
#!/usr/bin/env python """ Create a contour plot of irregular distributed data """ import numpy as np import gr np.random.seed(0) xd = np.random.uniform(-2, 2, 100) yd = np.random.uniform(-2, 2, 100) zd = xd * np.exp(-xd**2 - yd**2) gr.setviewport(0.1, 0.95, 0.1, 0.95) gr.setwindow(-2, 2, -2, 2) gr.setspace(-0.5, 0.5, 0, 90) gr.setmarkersize(1) gr.setmarkertype(gr.MARKERTYPE_SOLID_CIRCLE) gr.setcharheight(0.024) gr.settextalign(2, 0) gr.settextfontprec(3, 0) x, y, z = gr.gridit(xd, yd, zd, 200, 200) h = np.linspace(-0.5, 0.5, 20) gr.surface(x, y, z, 5) gr.contour(x, y, h, z, 0) gr.polymarker(xd, yd) gr.axes(0.25, 0.25, -2, -2, 2, 2, 0.01) gr.updatews()
""" import os, wave, pyaudio import numpy import gr SAMPLES = 2048 wf = wave.open(os.path.join(os.path.dirname(os.path.realpath(__file__)), 'Monty_Python.wav'), 'rb') pa = pyaudio.PyAudio() stream = pa.open(format=pa.get_format_from_width(wf.getsampwidth()), channels=wf.getnchannels(), rate=wf.getframerate(), output=True) gr.setwindow(0, SAMPLES, -30000, 30000) gr.setviewport(0.05, 0.95, 0.05, 0.95) gr.setlinecolorind(218) gr.setfillintstyle(1) gr.setfillcolorind(208) data = wf.readframes(SAMPLES) while data != '' and len(data) == SAMPLES * wf.getsampwidth(): stream.write(data) amplitudes = numpy.fromstring(data, dtype=numpy.short) power = abs(numpy.fft.fft(amplitudes / 512.0))[:SAMPLES/2:2] - 30000 gr.clearws() gr.fillrect(0, SAMPLES, -30000, 30000) gr.grid(40, 1200, 0, 0, 5, 5) gr.polyline(range(SAMPLES)[0::4], amplitudes[0::4]) gr.polyline(range(SAMPLES)[0::4], power)