def plot_strain(data_set, datum_init='4326'): # setup plot parameters plot = gmtpy.GMT(config={ 'PAPER_MEDIA': 'a4+', 'GRID_CROSS_SIZE_PRIMARY': '0.3c' }) # plot coastline & relief plot.grdimage('etopo1_greece.nc', J='T24/15c', C='sea.cpt', P=True) plot.pscoast(R='etopo1_greece.nc', J=True, D='f', G='c') plot.grdimage('etopo1_greece.nc', J=True, C='topo.cpt') plot.pscoast(R=True, J=True, B='2g1', Q=True) # create temporary list for 'psvelo' temp_list = [] if datum_init == '4326': # epsg: WGS84, latlong strain_data = [ data_set.center[0], data_set.center[1], data_set.k_max, data_set.k_min, data_set.az + 90. ] else: set_projection = pyproj.Proj(init="epsg:%s" % (datum_init)) WGS84 = pyproj.Proj(init='epsg:4326') center = pyproj.transform(set_projection, WGS84, data_set.center[0], data_set.center[1]) strain_data = [ center[0], center[1], data_set.k_max, data_set.k_min, data_set.az + 90. ] temp_list.append(strain_data) print strain_data # plot deformation ellipse plot.psvelo(in_rows=temp_list, R=True, J=True, S='x3c', W='thinnest') # save postscript plot.save('test.eps')
def test_grid_layout(self): for version in gmtpy.all_installed_gmt_versions(): gmt = gmtpy.GMT(version=version, config_papersize='a3') nx, ny = 2, 5 grid = gmtpy.GridLayout(nx, ny) layout = gmt.default_layout() layout.set_widget('center', grid) widgets = [] for iy in range(ny): for ix in range(nx): inner = gmtpy.FrameLayout() inner.set_fixed_margins( 1.*cm*golden_ratio, 1.*cm*golden_ratio, 1.*cm, 1.*cm) grid.set_widget(ix, iy, inner) inner.set_vertical(0, (iy+1.)) widgets.append(inner.get_widget('center')) gmt.draw_layout(layout) for widget in widgets: x = num.linspace(0., 10., 5) y = num.sin(x) xax = gmtpy.Ax(approx_ticks=4, snap=True) yax = gmtpy.Ax(approx_ticks=4, snap=True) guru = gmtpy.ScaleGuru([(x, y)], axes=(xax, yax)) gmt.psbasemap(*(widget.JXY() + guru.RB(ax_projection=True))) gmt.psxy(in_columns=(x, y), *(widget.JXY() + guru.R())) fname = 'gmtpy_test_grid_layout.png' fpath = self.fpath(fname) gmt.save(fpath, resolution=75)
def test_layout(self): x = num.linspace(0., math.pi*6, 1001) y1 = num.sin(x) * 1e-9 y2 = 2.0 * num.cos(x) * 1e-9 xax = gmtpy.Ax(label='Time', unit='s') yax = gmtpy.Ax( label='Amplitude', unit='m', scaled_unit='nm', scaled_unit_factor=1e9, approx_ticks=5, space=0.05) guru = gmtpy.ScaleGuru([(x, y1), (x, y2)], axes=(xax, yax)) for version in gmtpy.all_installed_gmt_versions(): width = 8*inch height = 3*inch gmt = gmtpy.GMT( version=version, config_papersize=(width, height)) layout = gmt.default_layout() widget = layout.get_widget() gmt.draw_layout(layout) gmt.psbasemap(*(widget.JXY() + guru.RB(ax_projection=True))) gmt.psxy( in_columns=(x, y1), W='1p,red', *(widget.JXY() + guru.R())) gmt.psxy( in_columns=(x, y2), W='1p,blue', *(widget.JXY() + guru.R())) fname = 'gmtpy_test_layout.png' fpath = self.fpath(fname) gmt.save(fpath)
def test_basic2(self): for version in gmtpy.all_installed_gmt_versions(): if version.startswith('5'): gmt = gmtpy.GMT( version=version, config={'MAP_FRAME_TYPE': 'fancy'}, eps_mode=True) else: gmt = gmtpy.GMT( version=version, config={'BASEMAP_TYPE': 'fancy'}) layout = gmt.default_layout() widget = layout.get_widget() xax = gmtpy.Ax(label='Lon', mode='min-max') yax = gmtpy.Ax(label='Lat', mode='min-max') scaler = gmtpy.ScaleGuru([([5, 15], [52, 58])], axes=(xax, yax)) par = scaler.get_params() lon0 = (par['xmin'] + par['xmax'])/2. lat0 = (par['ymin'] + par['ymax'])/2. sll = '%g/%g' % (lon0, lat0) widget['J'] = '-JM' + sll + '/%(width)gp' widget['J'] = '-JM' + sll + '/%(width)gp' scaler['B'] = \ '-B%(xinc)gg%(xinc)g:%(xlabel)s:' \ '/%(yinc)gg%(yinc)g:%(ylabel)s:WSen' aspect = gmtpy.aspect_for_projection( version, *(widget.J() + scaler.R())) aspect = 1.045 widget.set_aspect(aspect) gmt.pscoast(D='h', W='1p,red', *(widget.JXY() + scaler.R())) gmt.psbasemap(*(widget.JXY() + scaler.BR())) fname = 'gmtpy_test_basic2.png' fpath = self.fpath(fname) gmt.save(fpath, resolution=75, bbox=layout.bbox())
def save(self, filename_tmpl): self.gmtconfig['PAPER_MEDIA'] = 'Custom_%ix%i' % (self.width, self.height) self.gmtconfig['FRAME_PEN'] = '1p/150/150/150' self.gmtconfig['FRAME_WIDTH'] = '0.5p' fns = [] for ipage in range(self.npages()): gmt = gmtpy.GMT(config=self.gmtconfig) layout = gmt.default_layout() layout.set_widget('center', self.inner_layout) layout.set_fixed_margins(*self.margins) self._plot_traces(gmt, ipage) self._plot_labels(gmt, ipage) fn = filename_tmpl % ipage gmt.save(fn) fns.append(fn) return fns
def test_basic(self): for version in gmtpy.all_installed_gmt_versions(): width = 8.0 * inch height = 9.0 * inch resolution = 72 gmt = gmtpy.GMT(version=version, config_papersize=(width, height)) # needed to run on my computer, as the "J='E...'" # optins will not work # gmt.pscoast( # R='-30/330/-75/75', # J='m0.03c', # B='a30g30', # G=(0, 128, 0), # S=(255, 255, 255), # A='5000', # W='thinnest') gmt.pscoast( X=0, Y=0, R='g', J='E32/30/170/8i', B='10g10', D='c', A=10000, S=(114, 159, 207), G=(233, 185, 110), W='thinnest') gmt.dump('test') gmt.load('test') for oversample in (1, 2): fname = 'gmtpy_test_basic_o%i.png' % oversample fpath = self.fpath(fname) gmt.save(fpath, resolution=resolution, oversample=oversample) img = image.imread(fpath, format='png') self.assertEqual(img.shape, ( int(round(resolution*height/inch)), int(round(resolution*width/inch)), 3))
files = [dir + 'ssh_a', dir + 'ssh_d'] # 1D Gaussian filter with d = 14 km filter = 'g14k' # times * sigma times = 3 import gmtpy import numpy as N import pylab as P import shutil as sh from subprocess import call gmt = gmtpy.GMT() for f in files: sh.copy(f + '.txt', f + '.tmp') iter = 1 outliers = 0 repited = 0 # filtering print 'filtering ...' gmt.filter1d( N='4/3',
def plot_erroneous_ne_to_latlon(): import gmtpy import random import subprocess import time while True: w, h = 20, 15 gsize = random.uniform(0., 1.) * 4. * 10.**random.uniform(4., 7.) north_grid, east_grid = num.meshgrid( num.linspace(-gsize / 2., gsize / 2., 11), num.linspace(-gsize / 2., gsize / 2., 11)) north_grid = north_grid.flatten() east_grid = east_grid.flatten() lat_delta = gsize / earthradius * r2d * 2. lon = random.uniform(-180., 180.) lat = random.uniform(-90., 90.) print(gsize / 1000.) lat_grid, lon_grid = orthodrome.ne_to_latlon(lat, lon, north_grid, east_grid) lat_grid_alt, lon_grid_alt = \ orthodrome.ne_to_latlon_alternative_method( lat, lon, north_grid, east_grid) maxerrlat = num.max(num.abs(lat_grid - lat_grid_alt)) maxerrlon = num.max(num.abs(lon_grid - lon_grid_alt)) eps = 1.0e-8 if maxerrlon > eps or maxerrlat > eps: print(lat, lon, maxerrlat, maxerrlon) gmt = gmtpy.GMT( config={ 'PLOT_DEGREE_FORMAT': 'ddd.xxxF', 'PAPER_MEDIA': 'Custom_%ix%i' % (w * gmtpy.cm, h * gmtpy.cm), 'GRID_PEN_PRIMARY': 'thinnest/0/50/0' }) south = max(-85., lat - 0.5 * lat_delta) north = min(85., lat + 0.5 * lat_delta) lon_delta = lat_delta / math.cos(lat * d2r) delta = lat_delta / 360. * earthradius * 2. * math.pi scale_km = gmtpy.nice_value(delta / 10.) / 1000. west = lon - 0.5 * lon_delta east = lon + 0.5 * lon_delta x, y = (west, east), (south, north) xax = gmtpy.Ax(mode='min-max', approx_ticks=4.) yax = gmtpy.Ax(mode='min-max', approx_ticks=4.) scaler = gmtpy.ScaleGuru(data_tuples=[(x, y)], axes=(xax, yax)) scaler['R'] = '-Rg' layout = gmt.default_layout() mw = 2.5 * gmtpy.cm layout.set_fixed_margins(mw, mw, mw / gmtpy.golden_ratio, mw / gmtpy.golden_ratio) widget = layout.get_widget() # widget['J'] = ('-JT%g/%g' % (lon, lat)) + '/%(width)gp' widget['J'] = ( '-JE%g/%g/%g' % (lon, lat, min(lat_delta/2., 180.)))\ + '/%(width)gp' aspect = gmtpy.aspect_for_projection(*(widget.J() + scaler.R())) widget.set_aspect(aspect) gmt.psbasemap(B='5g5', L=('x%gp/%gp/%g/%g/%gk' % (widget.width() / 2., widget.height() / 7., lon, lat, scale_km)), *(widget.JXY() + scaler.R())) gmt.psxy(in_columns=(lon_grid, lat_grid), S='x10p', W='1p/200/0/0', *(widget.JXY() + scaler.R())) gmt.psxy(in_columns=(lon_grid_alt, lat_grid_alt), S='c10p', W='1p/0/0/200', *(widget.JXY() + scaler.R())) gmt.save('orthodrome.pdf') subprocess.call(['xpdf', '-remote', 'ortho', '-reload']) time.sleep(2) else: print('ok', gsize, lat, lon)
left.reverse() top.reverse() iy, ix = num.array(bottom + right + top + left).transpose() return x[0, ix], y[iy, 0] nx, ny = 101, 51 x = num.linspace(0, 20, nx)[num.newaxis, :] y = num.linspace(0, 10, ny)[:, num.newaxis] z = num.where(x >= y, num.sin(x) * num.sin(y), num.nan) dx = x[0, 1] - x[0, 0] dy = y[1, 0] - y[0, 0] outline = finite_outline(x, y, z) gmt = gmtpy.GMT(config={'PAGE_COLOR': '247/247/240'}) layout = gmt.default_layout() palette_layout = gmtpy.GridLayout(3, 1) layout.set_widget('center', palette_layout) widget = palette_layout.get_widget(0, 0) spacer = palette_layout.get_widget(1, 0) palette_widget = palette_layout.get_widget(2, 0) spacer.set_horizontal(0.5 * gmtpy.cm) palette_widget.set_horizontal(0.5 * gmtpy.cm) w, h = gmt.page_size_points() palette_layout.set_policy((w / gmtpy.golden_ratio, 0.), (0., 0.), aspect=1. / gmtpy.golden_ratio) xx, yy, zz = to_flat_xyz(x, y, z)
print gsize / 1000. lat_grid, lon_grid = ne_to_latlon(lat, lon, north_grid, east_grid) lat_grid_alt, lon_grid_alt = ne_to_latlon_alternative_method( lat, lon, north_grid, east_grid) maxerrlat = num.max(num.abs(lat_grid - lat_grid_alt)) maxerrlon = num.max(num.abs(lon_grid - lon_grid_alt)) eps = 1.0e-8 if maxerrlon > eps or maxerrlat > eps: print lat, lon, maxerrlat, maxerrlon gmt = gmtpy.GMT( config={ 'PLOT_DEGREE_FORMAT': 'ddd.xxxF', 'PAPER_MEDIA': 'Custom_%ix%i' % (w * gmtpy.cm, h * gmtpy.cm), 'GRID_PEN_PRIMARY': 'thinnest/0/50/0' }) south = max(-85., lat - 0.5 * lat_delta) north = min(85., lat + 0.5 * lat_delta) lon_delta = lat_delta / math.cos(lat * d2r) delta = lat_delta / 360. * config.earthradius * 2. * math.pi scale_km = gmtpy.nice_value(delta / 10.) / 1000. west = lon - 0.5 * lon_delta east = lon + 0.5 * lon_delta