예제 #1
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))

            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)

                self.compare_with_ref(fname, 0.03)

                img = image.imread(fpath, format='png')
                self.assertEqual(img.shape,
                                 (int(round(resolution * height / inch)),
                                  int(round(resolution * width / inch)), 3))
예제 #2
0
    def test_fidshi(self):
        x = num.linspace(178., 182., 101)
        y = num.linspace(-17.5, -14.5, 101)
        z = num.sin((x[num.newaxis, :]-x[0])/(x[-1]-x[0])*2.*math.pi*5) * \
            num.sin((y[:, num.newaxis]-y[0])/(y[-1]-y[0])*2.*math.pi*5) * 5000.

        tile = automap.FloatTile(xmin=x[0],
                                 ymin=y[0],
                                 dx=x[1] - x[0],
                                 dy=y[1] - y[0],
                                 data=z)

        for version in gmtpy.all_installed_gmt_versions():
            m = automap.Map(gmtversion=version,
                            lat=-16.5,
                            lon=180.,
                            radius=100. * km,
                            width=20.,
                            height=20.,
                            margins=[2., 2., 2., 4.5],
                            show_grid=True,
                            show_topo=True,
                            show_topo_scale=True,
                            replace_topo_color_only=tile,
                            illuminate=True)

            m.draw_cities()
            fname = 'automap_test_fidshi.png'
            fpath = self.fpath(fname)
            m.save(fpath)
            self.compare_with_ref(fname, 0.01, show=False)
    def test_fidshi(self):
        x = num.linspace(178., 182., 101)
        y = num.linspace(-17.5, -14.5, 101)
        z = num.sin((x[num.newaxis, :]-x[0])/(x[-1]-x[0])*2.*math.pi*5) * \
            num.sin((y[:, num.newaxis]-y[0])/(y[-1]-y[0])*2.*math.pi*5) * 5000.

        tile = automap.FloatTile(
            xmin=x[0],
            ymin=y[0],
            dx=x[1] - x[0],
            dy=y[1] - y[0],
            data=z)

        for version in gmtpy.all_installed_gmt_versions():
            m = automap.Map(
                gmtversion=version,
                lat=-16.5,
                lon=180.,
                radius=100.*km,
                width=20.,
                height=20.,
                margins=[2., 2., 2., 4.5],
                show_grid=True,
                show_topo=True,
                show_topo_scale=True,
                replace_topo_color_only=tile,
                illuminate=True)

            m.draw_cities()
            fname = 'automap_test_fidshi.png'
            fpath = self.fpath(fname)
            m.save(fpath)
            self.compare_with_ref(fname, 0.01, show=False)
예제 #4
0
    def test_napoli(self):
        for version in gmtpy.all_installed_gmt_versions():
            m = automap.Map(gmtversion=version,
                            lat=40.85,
                            lon=14.27,
                            radius=50. * km,
                            width=20.,
                            height=20.,
                            margins=[2., 2., 2., 4.5],
                            show_grid=True,
                            show_topo=True,
                            show_topo_scale=True,
                            illuminate=True,
                            custom_cities=[
                                automap.City('Pompeji',
                                             40.7506,
                                             14.4897,
                                             population=9000)
                            ],
                            comment='This is output from test_napoli!')

            assert m.have_coastlines()

            m.draw_cities(include=['Pompeji', 'Capri'])
            fname = 'automap_test_napoli.png'
            fpath = self.fpath(fname)
            m.save(fpath)
            self.compare_with_ref(fname, 0.01, show=False)
예제 #5
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))

            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)

                self.compare_with_ref(fname, 0.03)

                img = image.imread(fpath, format='png')
                self.assertEqual(img.shape, (
                    int(round(resolution*height/inch)),
                    int(round(resolution*width/inch)), 3))
    def test_napoli(self):
        for version in gmtpy.all_installed_gmt_versions():
            m = automap.Map(
                gmtversion=version,
                lat=40.85,
                lon=14.27,
                radius=50.*km,
                width=20.,
                height=20.,
                margins=[2., 2., 2., 4.5],
                show_grid=True,
                show_topo=True,
                show_topo_scale=True,
                illuminate=True,
                custom_cities=[
                    automap.City(
                        'Pompeji', 40.7506, 14.4897, population=9000)],
                comment='This is output from test_napoli!')

            assert m.have_coastlines()

            m.draw_cities(include=['Pompeji', 'Capri'])
            fname = 'automap_test_napoli.png'
            fpath = self.fpath(fname)
            m.save(fpath)
            self.compare_with_ref(fname, 0.01, show=False)
예제 #7
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)

            self.compare_with_ref(fname, 0.01)
예제 #8
0
    def test_override_args(self):
        x = num.array([0, 0.5, 1, 0])
        y = num.array([0, 1, 0, 0])
        width = 300
        height = 100
        config_papersize = (width, height)

        for version in gmtpy.all_installed_gmt_versions():
            gmt = gmtpy.GMT(
                version=version,
                config_papersize=config_papersize)

            for i, cutoff in enumerate([30, 90]):
                gmt.psxy(
                    in_columns=(i*2+x, y),
                    W='10p,red',
                    J='X%gp/%gp' % (width, height),
                    X=0,
                    Y=0,
                    R=(-1, 4, -1, 2),
                    config={
                        'PS_MITER_LIMIT': '%i' % cutoff})

            fname = 'gmtpy_test_override.png'
            fpath = self.fpath(fname)
            gmt.save(fpath)
            self.compare_with_ref(fname, 0.001, show=False)
예제 #9
0
    def test_text_box(self):

        for version in gmtpy.all_installed_gmt_versions():
            s = gmtpy.text_box('Hello', gmtversion=version)
            assert_allclose(s, (25.8, 9.), rtol=0.1)
            s = gmtpy.text_box('Abc def ghi jkl mno pqr stu vwx yz',
                               gmtversion=version)
            assert_allclose(s, (179.9, 12.3), rtol=0.01)
예제 #10
0
    def test_text_box(self):

        for version in gmtpy.all_installed_gmt_versions():
            s = gmtpy.text_box('Hello', gmtversion=version)
            assert_allclose(s, (25.8, 9.), rtol=0.1)
            s = gmtpy.text_box(
                'Abc def ghi jkl mno pqr stu vwx yz',
                gmtversion=version)
            assert_allclose(s, (179.9, 12.3), rtol=0.01)
예제 #11
0
    def test_simple_density(self):
        x = num.linspace(0., 2. * math.pi, 50)
        y = num.linspace(0., 2. * math.pi, 50)

        x2 = num.tile(x, y.size)
        y2 = num.repeat(y, x.size)
        z2 = num.sin(x2) * num.sin(y2)

        for version in gmtpy.all_installed_gmt_versions():
            for method in ['surface', 'triangulate', 'fillcontour']:
                plot = gmtpy.Simple(gmtversion=version, with_palette=True)
                plot.density_plot((x2, y2, z2), method=method)
                fname = 'gmtpy_test_simple_density_%s.png' % method
                fpath = self.fpath(fname)
                plot.save(fpath)
                self.compare_with_ref(fname, 0.02)
예제 #12
0
    def test_simple_density(self):
        x = num.linspace(0., 2.*math.pi, 50)
        y = num.linspace(0., 2.*math.pi, 50)

        x2 = num.tile(x, y.size)
        y2 = num.repeat(y, x.size)
        z2 = num.sin(x2) * num.sin(y2)

        for version in gmtpy.all_installed_gmt_versions():
            for method in ['surface', 'triangulate', 'fillcontour']:
                plot = gmtpy.Simple(gmtversion=version, with_palette=True)
                plot.density_plot((x2, y2, z2), method=method)
                fname = 'gmtpy_test_simple_density_%s.png' % method
                fpath = self.fpath(fname)
                plot.save(fpath)
                self.compare_with_ref(fname, 0.02)
예제 #13
0
    def test_simple(self):

        x = num.linspace(0., 2*math.pi)
        y = num.sin(x)
        y2 = num.cos(x)

        for version in gmtpy.all_installed_gmt_versions():
            for ymode in ['off', 'symmetric', 'min-max', 'min-0', '0-max']:
                plot = gmtpy.Simple(gmtversion=version, ymode=ymode)
                plot.plot((x, y), '-W1p,%s' % gmtpy.color('skyblue2'))
                plot.plot((x, y2), '-W1p,%s' % gmtpy.color(
                    gmtpy.color_tup('scarletred2')))
                plot.text((3., 0.5, 'hello'), size=20.)
                fname = 'gmtpy_test_simple_%s.png' % ymode
                fpath = self.fpath(fname)
                plot.save(fpath)
                self.compare_with_ref(fname, 0.01, show=False)
예제 #14
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())

            self.compare_with_ref(fname, 0.01, show=False)
예제 #15
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)

            self.compare_with_ref(fname, 0.01)
예제 #16
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)

            self.compare_with_ref(fname, 0.01)