Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add a gallery example showing the usage of Figure.hlines and Figure.vlines #3755

Merged
merged 44 commits into from
Jan 16, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
44 commits
Select commit Hold shift + click to select a range
6b9d64b
Create hlines_vlines.py
michaelgrund Jan 8, 2025
c3c3dcf
Update hlines_vlines.py
michaelgrund Jan 8, 2025
5c2ea76
[format-command] fixes
actions-bot Jan 8, 2025
ddc8c06
add fig.show
michaelgrund Jan 8, 2025
49f777f
update text
michaelgrund Jan 8, 2025
e41387f
add descriptions
michaelgrund Jan 8, 2025
0354586
add texts
michaelgrund Jan 8, 2025
b3d5970
update texts
michaelgrund Jan 8, 2025
6fd69f3
add texts
michaelgrund Jan 8, 2025
edbf3f6
[format-command] fixes
actions-bot Jan 8, 2025
66f05ff
fix lengths
michaelgrund Jan 8, 2025
fbeb177
make consistent
michaelgrund Jan 8, 2025
9cfe59e
Update hlines_vlines.py
michaelgrund Jan 8, 2025
b07b990
fix typo
michaelgrund Jan 8, 2025
26f94ac
add x and y
michaelgrund Jan 8, 2025
b5be723
fix typos
michaelgrund Jan 8, 2025
c29ae86
Update hlines_vlines.py
michaelgrund Jan 8, 2025
b7e5d21
[format-command] fixes
actions-bot Jan 8, 2025
49631b9
Merge branch 'main' into gallery-hlines-vlines
michaelgrund Jan 8, 2025
51e386e
Merge branch 'main' into gallery-hlines-vlines
michaelgrund Jan 8, 2025
8805817
Update hlines_vlines.py
michaelgrund Jan 8, 2025
f89cae5
rm trailing ws
michaelgrund Jan 8, 2025
8ce2a18
fix typo
michaelgrund Jan 8, 2025
d863b9c
Update hlines.py
michaelgrund Jan 8, 2025
d686ac8
Update vlines.py
michaelgrund Jan 8, 2025
c8cfa36
Apply suggestions from code review
michaelgrund Jan 8, 2025
5cee1a3
Update hlines_vlines.py
michaelgrund Jan 8, 2025
74f3b70
Apply suggestions from code review
michaelgrund Jan 9, 2025
d9bf2e3
Merge branch 'main' into gallery-hlines-vlines
michaelgrund Jan 9, 2025
43b3a68
adjust text
michaelgrund Jan 9, 2025
80526c5
Update hlines_vlines.py
michaelgrund Jan 10, 2025
a98789b
Apply suggestions from code review
michaelgrund Jan 10, 2025
abfa638
shorten descriptions
michaelgrund Jan 10, 2025
82d57f3
Update hlines_vlines.py
michaelgrund Jan 10, 2025
e1d7452
Apply suggestions from code review
michaelgrund Jan 10, 2025
aa20fa4
Merge branch 'main' into gallery-hlines-vlines
michaelgrund Jan 10, 2025
d1e7ff0
Update hlines_vlines.py
michaelgrund Jan 10, 2025
7f64d32
Apply suggestions from code review
michaelgrund Jan 12, 2025
0717bf7
Merge branch 'main' into gallery-hlines-vlines
michaelgrund Jan 12, 2025
8b020ce
Apply suggestions from code review
michaelgrund Jan 13, 2025
190e885
Merge branch 'main' into gallery-hlines-vlines
michaelgrund Jan 13, 2025
63063a8
Apply suggestions from code review
michaelgrund Jan 13, 2025
373e0a1
Apply suggestions from code review
michaelgrund Jan 14, 2025
4040925
Merge branch 'main' into gallery-hlines-vlines
michaelgrund Jan 15, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
117 changes: 117 additions & 0 deletions examples/gallery/lines/hlines_vlines.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,117 @@
"""
Horizontal and vertical lines
=============================

The :meth:`pygmt.Figure.hlines` and :meth:`pygmt.Figure.vlines` methods allow to plot
horizontal and vertical lines in Cartesian, geographic and polar coordinate systems.
michaelgrund marked this conversation as resolved.
Show resolved Hide resolved
"""

# %%
# Cartesian coordinate system
# ---------------------------
# In Cartesian coordinate systems lines are plotted as straight lines.

import pygmt

fig = pygmt.Figure()

fig.basemap(
region=[0, 10, 0, 10], projection="X10c/10c", frame=["+tCartesian hlines", "af"]
)

# Add a horizontal line at y=9
fig.hlines(y=9, pen="1.5p,red3", label="Line 1")
# Add a horizontal line at y=8 with x from 2 to 8
fig.hlines(y=8, xmin=2, xmax=8, pen="1.5p,gray30,-", label="Line 2")
# Add two horizontal lines at y=6 and y=7 both with x from 3 to 7
fig.hlines(y=[6, 7], xmin=3, xmax=7, pen="1.5p,salmon", label="Lines 3 & 4")
# Add two horizontal lines at y=4 and y=5 both with x from 4 to 9
fig.hlines(y=[4, 5], xmin=4, xmax=9, pen="1.5p,black,.", label="Lines 5 & 6")
# Add two horizontal lines at y=2 and y=3 with different x limits
fig.hlines(
y=[2, 3], xmin=[0, 1], xmax=[7, 7.5], pen="1.5p,dodgerblue3", label="Lines 7 & 8"
)
fig.legend(position="JBR+jBR+o0.2c", box="+gwhite+p1p")

fig.shift_origin(xshift="w+2c")

fig.basemap(
region=[0, 10, 0, 10], projection="X10c/10c", frame=["+tCartesian vlines", "af"]
)
# Add a vertical line at x=1
fig.vlines(x=1, pen="1.5p,red3", label="Line 1")
# Add a vertical line at x=2 with y from 2 to 8
fig.vlines(x=2, ymin=2, ymax=8, pen="1.5p,gray30,-", label="Line 2")
# Add two vertical lines at x=3 and x=4 both with y from 3 to 7
fig.vlines(x=[3, 4], ymin=3, ymax=7, pen="1.5p,salmon", label="Lines 3 & 4")
# Add two vertical lines at x=5 and x=6 both with y from 4 to 9
fig.vlines(x=[5, 6], ymin=4, ymax=9, pen="1.5p,black,.", label="Lines 5 & 6")
# Add two vertical lines at x=7 and x=8 with different y limits
fig.vlines(
x=[7, 8], ymin=[0, 1], ymax=[7, 7.5], pen="1.5p,dodgerblue3", label="Lines 7 & 8"
)
fig.legend()

fig.show()

# %%
# Geographic coordinate system
# ----------------------------
# The same can be done in geographic coordinate systems where "horizontal" means lines
# are plotted along parallels (constant latitude) while "vertical" means lines are
# plotted along meridians (constant longitude).

fig = pygmt.Figure()

fig.basemap(region="g", projection="R15c", frame=["+tGeographic hlines", "af"])
# Add a line at 70°N
fig.hlines(y=70, pen="1.5p,red3", label="Line 1")
# Add a line at 50°N with longitude limits at 20°E and 160°E
fig.hlines(y=50, xmin=20, xmax=160, pen="1.5p,dodgerblue3", label="Line 2")
# Add a line at 30°S with longitude limits at 60°E and 270°E
fig.hlines(y=-30, xmin=60, xmax=270, pen="1.5p,gray30,-", label="Line 3")
fig.legend()

fig.shift_origin(xshift="w+2c")

fig.basemap(region="g", projection="R15c", frame=["+tGeographic vlines", "af"])
# Add a line at 70°E
fig.vlines(x=70, pen="1.5p,red3", label="Line 1")
# Add a line at 20°E with latitude limits at 50°S and 70°N
fig.vlines(x=120, ymin=-50, ymax=70, pen="1.5p,dodgerblue3", label="Line 2")
# Add a line at 230°E with latitude limits at 70°S and 80°N
fig.vlines(x=230, ymin=-70, ymax=80, pen="1.5p,gray30,-", label="Line 3")
fig.legend()

fig.show()

# %%
# Polar coordinate system
# -----------------------
# When using polar coordinate systems "horizontal" means lines are plotted as arcs along
# a constant radius while "vertical" means lines are plotted as straight lines along
# radius at a specified azimuth.

fig = pygmt.Figure()

fig.basemap(region=[0, 360, 0, 1], projection="P10c", frame=["+tPolar hlines", "af"])
# Add a line along radius=0.8
fig.hlines(y=0.8, pen="1.5p,red3", label="Line 1")
# Add a line along radius=0.5 with azimuth limits at 30° and 160°
fig.hlines(y=0.5, xmin=30, xmax=160, pen="1.5p,dodgerblue3", label="Line 2")
# Add a line along radius=0.25 with azimuth limits at 60° and 270°
fig.hlines(y=0.25, xmin=60, xmax=270, pen="1.5p,gray30,-", label="Line 3")
fig.legend()

fig.shift_origin(xshift="w+2c")

fig.basemap(region=[0, 360, 0, 1], projection="P10c", frame=["+tPolar vlines", "af"])
# Add a line along azimuth=120°
fig.vlines(x=120, pen="1.5p,red3", label="Line 1")
# Add a line along azimuth=190° with radius limits at 0.2 and 0.8
fig.vlines(x=190, ymin=0.2, ymax=0.8, pen="1.5p,dodgerblue3", label="Line 2")
# Add a line along azimuth=320 with radius limits at 0.5 and 0.9
fig.vlines(x=320, ymin=0.5, ymax=0.9, pen="1.5p,gray30,-", label="Line 3")
fig.legend()

fig.show()
7 changes: 4 additions & 3 deletions pygmt/src/hlines.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,9 +38,10 @@ def hlines(
The term "horizontal" lines can be interpreted differently in different coordinate
systems:

- **Cartesian** coordinate system: lines are plotted as straight lines.
- **Polar** projection: lines are plotted as arcs along a constant radius.
- **Geographic** projection: lines are plotted as parallels along constant latitude.
- **Cartesian**: lines are plotted as straight lines.
- **Polar**: lines are plotted as arcs along a constant radius.
- **Geographic**: lines are plotted as arcs along parallels (i.e., constant
latitude).

Parameters
----------
Expand Down
8 changes: 4 additions & 4 deletions pygmt/src/vlines.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,10 +38,10 @@ def vlines(
The term "vertical" lines can be interpreted differently in different coordinate
systems:

- **Cartesian** coordinate system: lines are plotted as straight lines.
- **Polar** projection: lines are plotted as straight lines along radius.
- **Geographic** projection: lines are plotted as meridians along constant
longitude.
- **Cartesian**: lines are plotted as straight lines.
- **Polar**: lines are plotted as straight lines along a constant azimuth.
- **Geographic**: lines are plotted as arcs along meridians (i.e., constant
longitude).

Parameters
----------
Expand Down
Loading