Beispiel #1
0
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')
Beispiel #2
0
    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)
Beispiel #3
0
    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)
Beispiel #4
0
    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())
Beispiel #5
0
    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
Beispiel #6
0
    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))
Beispiel #7
0
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',
Beispiel #8
0
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)
Beispiel #9
0
    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)
Beispiel #10
0
        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