From c6c69d54fd3b556ffa957271bac1bd561eb30db3 Mon Sep 17 00:00:00 2001 From: yvonnefroelich Date: Tue, 24 Sep 2024 10:14:11 +0200 Subject: [PATCH 1/9] POC: Combine oblique Mercator projections --- doc/techref/projections.md | 6 +- .../projections/cyl/cyl_oblique_mercator.py | 87 +++++++++++++++++++ .../projections/cyl/cyl_oblique_mercator_1.py | 34 -------- .../projections/cyl/cyl_oblique_mercator_2.py | 34 -------- .../projections/cyl/cyl_oblique_mercator_3.py | 33 ------- 5 files changed, 90 insertions(+), 104 deletions(-) create mode 100755 examples/projections/cyl/cyl_oblique_mercator.py delete mode 100644 examples/projections/cyl/cyl_oblique_mercator_1.py delete mode 100644 examples/projections/cyl/cyl_oblique_mercator_2.py delete mode 100644 examples/projections/cyl/cyl_oblique_mercator_3.py diff --git a/doc/techref/projections.md b/doc/techref/projections.md index 16d659f5372..0f1d472c624 100644 --- a/doc/techref/projections.md +++ b/doc/techref/projections.md @@ -33,9 +33,9 @@ The table below shows the projection codes for the 31 GMT map projections: | **L**{{ lon0 }}/{{ lat0 }}/{{ lat1 }}/{{ lat2 }}/*width* | {doc}`/projections/conic/conic_lambert` | | **M**[{{ lon0 }}/[{{ lat0 }}/]]*width* | {doc}`/projections/cyl/cyl_mercator` | | **N**[{{ lon0 }}/]*width* | {doc}`/projections/misc/misc_robinson` | -| **Oa**{{ lon0 }}/{{ lat0 }}/*azimuth*/*width*[**+v**] | {doc}`/projections/cyl/cyl_oblique_mercator_1` | -| **Ob**{{ lon0 }}/{{ lat0 }}/{{ lon1 }}/{{ lat1 }}/*width*[**+v**] | {doc}`/projections/cyl/cyl_oblique_mercator_2` | -| **Oc**{{ lon0 }}/{{ lat0 }}/{{ lonp }}/{{ latp }}/*width*[**+v**] | {doc}`/projections/cyl/cyl_oblique_mercator_3` | +| **Oa**{{ lon0 }}/{{ lat0 }}/*azimuth*/*width*[**+v**] | {doc}`/projections/cyl/cyl_oblique_mercator` | +| **Ob**{{ lon0 }}/{{ lat0 }}/{{ lon1 }}/{{ lat1 }}/*width*[**+v**] | {doc}`/projections/cyl/cyl_oblique_mercator` | +| **Oc**{{ lon0 }}/{{ lat0 }}/{{ lonp }}/{{ latp }}/*width*[**+v**] | {doc}`/projections/cyl/cyl_oblique_mercator` | | **P***width*[**+a**][**+f**[**e**\|**p**\|*radius*]][**+r***offset*][**+t***origin*][**+z**[**p**\|*radius*]] | Polar {doc}`azimuthal ` ({math}`\theta, r`) or cylindrical | | **Poly**/[{{ lon0 }}/[{{ lat0 }}/]]*width* | {doc}`/projections/conic/polyconic` | | **Q**[{{ lon0 }}/[{{ lat0 }}/]]*width* | {doc}`/projections/cyl/cyl_equidistant` | diff --git a/examples/projections/cyl/cyl_oblique_mercator.py b/examples/projections/cyl/cyl_oblique_mercator.py new file mode 100755 index 00000000000..50ea22027ce --- /dev/null +++ b/examples/projections/cyl/cyl_oblique_mercator.py @@ -0,0 +1,87 @@ +r""" +Oblique Mercator projection +=========================== + +Oblique configurations of the cylinder give rise to the oblique Mercator projection. +It is particularly useful when mapping regions of large lateral extent in an oblique +direction. Both parallels and meridians are complex curves. The projection was +developed in the early 1900s by several workers. + +The projection is set with **o** or **O**. There are three different specification +ways (**a**\|\ **A**, **b**\|\ **B**, **c**\|\ **C**) available. For all three +definitions, the upper case letter mean the projection pole is set in the southern +hemisphere [Default is northern hemisphere]. Align the y-axis with the optional +modifier **+v**. The figure size is set with *scale* or *width*. + + +1. Using the origin and azimuth +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**oa**\|\ **oA**\ *lon0/lat0/azimuth/scale*\[**+v**] or +**Oa**\|\ **OA**\ *lon0/lat0/azimuth/width*\[**+v**] + +The central meridian is set by *lon0/lat0*. +The oblique equator is set by *azimuth*. + + +2. Using two points +~~~~~~~~~~~~~~~~~~~ + +**ob**\|\ **oB**\ *lon0/lat0/lon1/lat1/scale*\ [**+v**] or +**Ob**\|\ **OB**\ *lon0/lat0/lon1/lat1/width*\ [**+v**] + +The central meridian is set by *lon0/lat0*. +The oblique equator is set by *lon1/lat1*. + + +3. Using the origin and projection pole +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**oc**\|\ **oC**\ *lon0/lat0/lonp/latp/scale*\ [**+v**] or +**Oc**\|\ **OC**\ *lon0/lat0/lonp/latp/width*\ [**+v**] + +The central meridian is set by *lon0/lat0*. +The projection pole is set by *lonp/latp*. +""" + +# %% +import pygmt + +fig = pygmt.Figure() + +# Left: Using the origin and azimuth +fig.coast( + projection="Oa-120/25/-30/6c+v", + # Set bottom left and top right coordinates of the figure with "+r" + region="-122/35/-107/22+r", + frame=["afg", "+ta | A"], + land="gray", + shorelines="1/thin", + water="lightblue", +) + +fig.shift_origin(xshift="+w2c") + +# Middle: Using two points +fig.coast( + projection="Ob130/35/25/35/6c", + region="130/35/145/40+r", + frame=["afg", "+tb | B"], + land="gray", + shorelines="1/thin", + water="lightblue", +) + +fig.shift_origin(xshift="+w2c") + +# Right: Using the origin and projection pole +fig.coast( + projection="Oc280/25.5/22/69/12c", + region="270/20/305/25+r", + frame=["afg", "+tc | C"], + land="gray", + shorelines="1/thin", + water="lightblue", +) + +fig.show() diff --git a/examples/projections/cyl/cyl_oblique_mercator_1.py b/examples/projections/cyl/cyl_oblique_mercator_1.py deleted file mode 100644 index 5d5973a51cf..00000000000 --- a/examples/projections/cyl/cyl_oblique_mercator_1.py +++ /dev/null @@ -1,34 +0,0 @@ -r""" -Oblique Mercator projection, 1: origin and azimuth -================================================== - -Oblique configurations of the cylinder give rise to the oblique Mercator -projection. It is particularly useful when mapping regions of large lateral -extent in an oblique direction. Both parallels and meridians are complex -curves. The projection was developed in the early 1900s by several workers. - -**oa**\|\ **oA**\ *lon0/lat0/azimuth/scale*\[**+v**] or -**Oa**\|\ **OA**\ *lon0/lat0/azimuth/width*\[**+v**] - -The projection is set with **o** or **O**. The pole is set in the -northern hemisphere with **a** or the southern hemisphere -with **A**. The central meridian is set by *lon0/lat0*. The oblique equator -is set by *azimuth*. Align the y-axis -with the optional **+v**. The figure size is set with *scale* or *width*. -""" - -# %% -import pygmt - -fig = pygmt.Figure() -# Using the origin and azimuth -fig.coast( - projection="Oa-120/25/-30/6c+v", - # Set bottom left and top right coordinates of the figure with "+r" - region="-122/35/-107/22+r", - frame="afg", - land="gray", - shorelines="1/thin", - water="lightblue", -) -fig.show() diff --git a/examples/projections/cyl/cyl_oblique_mercator_2.py b/examples/projections/cyl/cyl_oblique_mercator_2.py deleted file mode 100644 index bf4bb555691..00000000000 --- a/examples/projections/cyl/cyl_oblique_mercator_2.py +++ /dev/null @@ -1,34 +0,0 @@ -r""" -Oblique Mercator projection, 2: two points -========================================== - -Oblique configurations of the cylinder give rise to the oblique Mercator -projection. It is particularly useful when mapping regions of large lateral -extent in an oblique direction. Both parallels and meridians are complex -curves. The projection was developed in the early 1900s by several workers. - -**ob**\|\ **oB**\ *lon0/lat0/lon1/lat1/scale*\ [**+v**] or -**Ob**\|\ **OB**\ *lon0/lat0/lon1/lat1/width*\ [**+v**] - -The projection is set with **o** or **O**. The pole is set in the -northern hemisphere with **b** or the southern hemisphere -with **B**. The central meridian is set by *lon0/lat0*. The oblique -equator is set by *lon1/lat1*. Align the y-axis -with the optional **+v**. The figure size is set with *scale* or *width*. -""" - -# %% -import pygmt - -fig = pygmt.Figure() -# Using the origin and two points -fig.coast( - projection="Ob130/35/25/35/6c", - # Set bottom left and top right coordinates of the figure with "+r" - region="130/35/145/40+r", - frame="afg", - land="gray", - shorelines="1/thin", - water="lightblue", -) -fig.show() diff --git a/examples/projections/cyl/cyl_oblique_mercator_3.py b/examples/projections/cyl/cyl_oblique_mercator_3.py deleted file mode 100644 index af55e8f51e5..00000000000 --- a/examples/projections/cyl/cyl_oblique_mercator_3.py +++ /dev/null @@ -1,33 +0,0 @@ -r""" -Oblique Mercator projection, 3: origin and pole -=============================================== - -Oblique configurations of the cylinder give rise to the oblique Mercator -projection. It is particularly useful when mapping regions of large lateral -extent in an oblique direction. Both parallels and meridians are complex -curves. The projection was developed in the early 1900s by several workers. - -**oc**\|\ **oC**\ *lon0/lat0/lonp/latp/scale*\ [**+v**] or -**Oc**\|\ **OC**\ *lon0/lat0/lonp/latp/width*\ [**+v**] - -The projection is set with **o** or **O**. The central meridian is set -by *lon0/lat0*. The projection pole is set by *lonp/latp* in option three. -Align the y-axis with the optional **+v**. The figure size is set -with *scale* or *width*. -""" - -# %% -import pygmt - -fig = pygmt.Figure() -# Using the origin and projection pole -fig.coast( - projection="Oc280/25.5/22/69/12c", - # Set bottom left and top right coordinates of the figure with "+r" - region="270/20/305/25+r", - frame="afg", - land="gray", - shorelines="1/thin", - water="lightblue", -) -fig.show() From d7692ed0a6b9fc4d158ea1f031ce382b719d341f Mon Sep 17 00:00:00 2001 From: yvonnefroelich Date: Tue, 24 Sep 2024 10:35:00 +0200 Subject: [PATCH 2/9] Adjust link --- doc/techref/projections.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/doc/techref/projections.md b/doc/techref/projections.md index 0f1d472c624..9ca2d9dcef1 100644 --- a/doc/techref/projections.md +++ b/doc/techref/projections.md @@ -33,9 +33,9 @@ The table below shows the projection codes for the 31 GMT map projections: | **L**{{ lon0 }}/{{ lat0 }}/{{ lat1 }}/{{ lat2 }}/*width* | {doc}`/projections/conic/conic_lambert` | | **M**[{{ lon0 }}/[{{ lat0 }}/]]*width* | {doc}`/projections/cyl/cyl_mercator` | | **N**[{{ lon0 }}/]*width* | {doc}`/projections/misc/misc_robinson` | -| **Oa**{{ lon0 }}/{{ lat0 }}/*azimuth*/*width*[**+v**] | {doc}`/projections/cyl/cyl_oblique_mercator` | -| **Ob**{{ lon0 }}/{{ lat0 }}/{{ lon1 }}/{{ lat1 }}/*width*[**+v**] | {doc}`/projections/cyl/cyl_oblique_mercator` | -| **Oc**{{ lon0 }}/{{ lat0 }}/{{ lonp }}/{{ latp }}/*width*[**+v**] | {doc}`/projections/cyl/cyl_oblique_mercator` | +| **Oa**{{ lon0 }}/{{ lat0 }}/*azimuth*/*width*[**+v**] | Oblique Mercator projection: {doc}`1. origin and azimuth ` | +| **Ob**{{ lon0 }}/{{ lat0 }}/{{ lon1 }}/{{ lat1 }}/*width*[**+v**] | Oblique Mercator projection: {doc}`2. two points ` | +| **Oc**{{ lon0 }}/{{ lat0 }}/{{ lonp }}/{{ latp }}/*width*[**+v**] | Oblique Mercator projection: {doc}`3. origin and projection pole ` | | **P***width*[**+a**][**+f**[**e**\|**p**\|*radius*]][**+r***offset*][**+t***origin*][**+z**[**p**\|*radius*]] | Polar {doc}`azimuthal ` ({math}`\theta, r`) or cylindrical | | **Poly**/[{{ lon0 }}/[{{ lat0 }}/]]*width* | {doc}`/projections/conic/polyconic` | | **Q**[{{ lon0 }}/[{{ lat0 }}/]]*width* | {doc}`/projections/cyl/cyl_equidistant` | From 884b12effb23af14a62577aed5b2d85ad0dfad7b Mon Sep 17 00:00:00 2001 From: yvonnefroelich Date: Tue, 24 Sep 2024 10:58:35 +0200 Subject: [PATCH 3/9] Remove execution permission --- examples/projections/cyl/cyl_oblique_mercator.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100755 => 100644 examples/projections/cyl/cyl_oblique_mercator.py diff --git a/examples/projections/cyl/cyl_oblique_mercator.py b/examples/projections/cyl/cyl_oblique_mercator.py old mode 100755 new mode 100644 From 3c06ce2583e1410a561b9c47620d5107434540a6 Mon Sep 17 00:00:00 2001 From: yvonnefroelich Date: Tue, 24 Sep 2024 12:59:37 +0200 Subject: [PATCH 4/9] Make color of water consistent --- examples/projections/cyl/cyl_oblique_mercator.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/projections/cyl/cyl_oblique_mercator.py b/examples/projections/cyl/cyl_oblique_mercator.py index 50ea22027ce..60b72173b4e 100644 --- a/examples/projections/cyl/cyl_oblique_mercator.py +++ b/examples/projections/cyl/cyl_oblique_mercator.py @@ -57,7 +57,7 @@ frame=["afg", "+ta | A"], land="gray", shorelines="1/thin", - water="lightblue", + water="white", ) fig.shift_origin(xshift="+w2c") @@ -69,7 +69,7 @@ frame=["afg", "+tb | B"], land="gray", shorelines="1/thin", - water="lightblue", + water="white", ) fig.shift_origin(xshift="+w2c") @@ -81,7 +81,7 @@ frame=["afg", "+tc | C"], land="gray", shorelines="1/thin", - water="lightblue", + water="white", ) fig.show() From b29a0a8f0ef01543464437ee34b71078231ed37c Mon Sep 17 00:00:00 2001 From: yvonnefroelich Date: Tue, 24 Sep 2024 22:51:03 +0200 Subject: [PATCH 5/9] Remove water and shorelines --- examples/projections/cyl/cyl_oblique_mercator.py | 6 ------ 1 file changed, 6 deletions(-) diff --git a/examples/projections/cyl/cyl_oblique_mercator.py b/examples/projections/cyl/cyl_oblique_mercator.py index 60b72173b4e..0813664a3f3 100644 --- a/examples/projections/cyl/cyl_oblique_mercator.py +++ b/examples/projections/cyl/cyl_oblique_mercator.py @@ -56,8 +56,6 @@ region="-122/35/-107/22+r", frame=["afg", "+ta | A"], land="gray", - shorelines="1/thin", - water="white", ) fig.shift_origin(xshift="+w2c") @@ -68,8 +66,6 @@ region="130/35/145/40+r", frame=["afg", "+tb | B"], land="gray", - shorelines="1/thin", - water="white", ) fig.shift_origin(xshift="+w2c") @@ -80,8 +76,6 @@ region="270/20/305/25+r", frame=["afg", "+tc | C"], land="gray", - shorelines="1/thin", - water="white", ) fig.show() From cd15b7dafaf1dfacc4f7448da9cc82f9be16f97c Mon Sep 17 00:00:00 2001 From: yvonnefroelich Date: Thu, 26 Sep 2024 17:34:10 +0200 Subject: [PATCH 6/9] Generate separate images --- .../projections/cyl/cyl_oblique_mercator.py | 23 +++++++++++-------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/examples/projections/cyl/cyl_oblique_mercator.py b/examples/projections/cyl/cyl_oblique_mercator.py index 0813664a3f3..79aa5ce5369 100644 --- a/examples/projections/cyl/cyl_oblique_mercator.py +++ b/examples/projections/cyl/cyl_oblique_mercator.py @@ -47,35 +47,40 @@ # %% import pygmt -fig = pygmt.Figure() +pygmt.config(FONT="5p", MAP_FRAME_PEN="0.5p", MAP_TITLE_OFFSET="-5p") +# ----------------------------------------------------------------------------- # Left: Using the origin and azimuth +fig = pygmt.Figure() fig.coast( - projection="Oa-120/25/-30/6c+v", + projection="Oa-120/25/-30/2c+v", # Set bottom left and top right coordinates of the figure with "+r" region="-122/35/-107/22+r", frame=["afg", "+ta | A"], land="gray", ) +fig.show() -fig.shift_origin(xshift="+w2c") - +# ----------------------------------------------------------------------------- # Middle: Using two points +fig = pygmt.Figure() fig.coast( - projection="Ob130/35/25/35/6c", + projection="Ob130/35/25/35/2c", region="130/35/145/40+r", frame=["afg", "+tb | B"], land="gray", ) +fig.show() -fig.shift_origin(xshift="+w2c") - +# ----------------------------------------------------------------------------- # Right: Using the origin and projection pole +fig = pygmt.Figure() fig.coast( - projection="Oc280/25.5/22/69/12c", + projection="Oc280/25.5/22/69/3c", region="270/20/305/25+r", frame=["afg", "+tc | C"], land="gray", ) - fig.show() + +# sphinx_gallery_thumbnail_number = 3 From 1d154c268792de40c74d2e4ff5068e035be4b797 Mon Sep 17 00:00:00 2001 From: yvonnefroelich Date: Thu, 26 Sep 2024 19:24:13 +0200 Subject: [PATCH 7/9] Adjust GMt defaults --- examples/projections/cyl/cyl_oblique_mercator.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/projections/cyl/cyl_oblique_mercator.py b/examples/projections/cyl/cyl_oblique_mercator.py index 79aa5ce5369..7cf95fe8203 100644 --- a/examples/projections/cyl/cyl_oblique_mercator.py +++ b/examples/projections/cyl/cyl_oblique_mercator.py @@ -47,7 +47,7 @@ # %% import pygmt -pygmt.config(FONT="5p", MAP_FRAME_PEN="0.5p", MAP_TITLE_OFFSET="-5p") +pygmt.config(FONT="4.5p", MAP_FRAME_PEN="0.3p", MAP_TITLE_OFFSET="-6p") # ----------------------------------------------------------------------------- # Left: Using the origin and azimuth From f5ab3f769cbd386a02c88f4650771394610c15bc Mon Sep 17 00:00:00 2001 From: yvonnefroelich Date: Fri, 27 Sep 2024 02:45:38 +0200 Subject: [PATCH 8/9] Adjust GMT Defaults --- examples/projections/cyl/cyl_oblique_mercator.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/projections/cyl/cyl_oblique_mercator.py b/examples/projections/cyl/cyl_oblique_mercator.py index 7cf95fe8203..6e7ea6f204d 100644 --- a/examples/projections/cyl/cyl_oblique_mercator.py +++ b/examples/projections/cyl/cyl_oblique_mercator.py @@ -47,7 +47,7 @@ # %% import pygmt -pygmt.config(FONT="4.5p", MAP_FRAME_PEN="0.3p", MAP_TITLE_OFFSET="-6p") +pygmt.config(FONT="4p", MAP_FRAME_PEN="0.3p", MAP_TITLE_OFFSET="-7p") # ----------------------------------------------------------------------------- # Left: Using the origin and azimuth From bd9e1ed0101ad39da556ef877ffb994463f8be66 Mon Sep 17 00:00:00 2001 From: yvonnefroelich Date: Fri, 27 Sep 2024 10:05:02 +0200 Subject: [PATCH 9/9] Move code blocks within each subsection --- .../projections/cyl/cyl_oblique_mercator.py | 80 ++++++++----------- 1 file changed, 32 insertions(+), 48 deletions(-) diff --git a/examples/projections/cyl/cyl_oblique_mercator.py b/examples/projections/cyl/cyl_oblique_mercator.py index 6e7ea6f204d..0942e5183eb 100644 --- a/examples/projections/cyl/cyl_oblique_mercator.py +++ b/examples/projections/cyl/cyl_oblique_mercator.py @@ -12,74 +12,58 @@ definitions, the upper case letter mean the projection pole is set in the southern hemisphere [Default is northern hemisphere]. Align the y-axis with the optional modifier **+v**. The figure size is set with *scale* or *width*. - - -1. Using the origin and azimuth -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -**oa**\|\ **oA**\ *lon0/lat0/azimuth/scale*\[**+v**] or -**Oa**\|\ **OA**\ *lon0/lat0/azimuth/width*\[**+v**] - -The central meridian is set by *lon0/lat0*. -The oblique equator is set by *azimuth*. - - -2. Using two points -~~~~~~~~~~~~~~~~~~~ - -**ob**\|\ **oB**\ *lon0/lat0/lon1/lat1/scale*\ [**+v**] or -**Ob**\|\ **OB**\ *lon0/lat0/lon1/lat1/width*\ [**+v**] - -The central meridian is set by *lon0/lat0*. -The oblique equator is set by *lon1/lat1*. - - -3. Using the origin and projection pole -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -**oc**\|\ **oC**\ *lon0/lat0/lonp/latp/scale*\ [**+v**] or -**Oc**\|\ **OC**\ *lon0/lat0/lonp/latp/width*\ [**+v**] - -The central meridian is set by *lon0/lat0*. -The projection pole is set by *lonp/latp*. """ # %% -import pygmt +# 1. Using the origin and azimuth +# ------------------------------- +# +# **oa**\|\ **oA**\ *lon0/lat0/azimuth/scale*\[**+v**] or +# **Oa**\|\ **OA**\ *lon0/lat0/azimuth/width*\[**+v**] +# +# The central meridian is set by *lon0/lat0*. The oblique equator is set by *azimuth*. -pygmt.config(FONT="4p", MAP_FRAME_PEN="0.3p", MAP_TITLE_OFFSET="-7p") +import pygmt -# ----------------------------------------------------------------------------- -# Left: Using the origin and azimuth fig = pygmt.Figure() fig.coast( - projection="Oa-120/25/-30/2c+v", + projection="Oa-120/25/-30/3c+v", # Set bottom left and top right coordinates of the figure with "+r" region="-122/35/-107/22+r", - frame=["afg", "+ta | A"], + frame="afg", land="gray", ) fig.show() -# ----------------------------------------------------------------------------- -# Middle: Using two points + +# %% +# 2. Using two points +# ------------------- +# +# **ob**\|\ **oB**\ *lon0/lat0/lon1/lat1/scale*\ [**+v**] or +# **Ob**\|\ **OB**\ *lon0/lat0/lon1/lat1/width*\ [**+v**] +# +# The central meridian is set by *lon0/lat0*. The oblique equator is set by *lon1/lat1*. + fig = pygmt.Figure() fig.coast( - projection="Ob130/35/25/35/2c", - region="130/35/145/40+r", - frame=["afg", "+tb | B"], - land="gray", + projection="Ob130/35/25/35/3c", region="130/35/145/40+r", frame="afg", land="gray" ) fig.show() -# ----------------------------------------------------------------------------- -# Right: Using the origin and projection pole + +# %% +# 3. Using the origin and projection pole +# --------------------------------------- +# +# **oc**\|\ **oC**\ *lon0/lat0/lonp/latp/scale*\ [**+v**] or +# **Oc**\|\ **OC**\ *lon0/lat0/lonp/latp/width*\ [**+v**] +# +# The central meridian is set by *lon0/lat0*. The projection pole is set by *lonp/latp*. + fig = pygmt.Figure() fig.coast( - projection="Oc280/25.5/22/69/3c", - region="270/20/305/25+r", - frame=["afg", "+tc | C"], - land="gray", + projection="Oc280/25.5/22/69/4c", region="270/20/305/25+r", frame="afg", land="gray" ) fig.show()