Skip to content

Add gallery example "Cross-section along a transect" #2515

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

Merged
merged 59 commits into from
Aug 21, 2023
Merged
Changes from all commits
Commits
Show all changes
59 commits
Select commit Hold shift + click to select a range
679ccf9
Add basic code
yvonnefroehlich Apr 24, 2023
588eec8
Add introduction
yvonnefroehlich Apr 24, 2023
86ee2fb
Add first comments to code
yvonnefroehlich Apr 24, 2023
8807d26
Replace tabs by four spaces
yvonnefroehlich Apr 24, 2023
02e3a44
Rename 'track.py' -> 'cross_section.py'
yvonnefroehlich Apr 24, 2023
50fdb76
[format-command] fixes
actions-bot Apr 24, 2023
9f82ebc
Add more comments to code
yvonnefroehlich Apr 24, 2023
9ca69d2
Replace tabs by four spaces
yvonnefroehlich Apr 24, 2023
1ec8745
Fix typo
yvonnefroehlich Apr 24, 2023
a7573af
Improve formulation
yvonnefroehlich Apr 24, 2023
554f750
Merge branch 'main' into rewrite-ex026-to-pygmt
yvonnefroehlich May 2, 2023
b884167
Improve formulation of reference to GMT/China docs
yvonnefroehlich May 2, 2023
68ec873
Remove trailing white space
yvonnefroehlich May 2, 2023
209cfb7
Reduce resolution temporarly
May 3, 2023
dbf4e82
Remove 'r' at the beginning of the docstrings
yvonnefroehlich May 7, 2023
f2f8429
Improve comments
yvonnefroehlich May 7, 2023
1a2dc75
Adjust comments temporaly
yvonnefroehlich May 7, 2023
321ca29
Improve comments
yvonnefroehlich May 7, 2023
4f5e6e7
Merge branch 'main' into rewrite-ex026-to-pygmt
yvonnefroehlich May 14, 2023
387eb87
Improve comment for track labels
yvonnefroehlich May 14, 2023
03aacf2
Improve comment for track labels
yvonnefroehlich May 14, 2023
84a766c
Fix line length - shorten comment
yvonnefroehlich May 14, 2023
ad23ec9
Fix line length - shorten comment
yvonnefroehlich May 14, 2023
8ed29b6
Merge branch 'main' into rewrite-ex026-to-pygmt
yvonnefroehlich May 27, 2023
87077fa
Merge branch 'main' into rewrite-ex026-to-pygmt
yvonnefroehlich Jun 4, 2023
f9bccb8
Expand introduction and comments
yvonnefroehlich Jun 11, 2023
9c294b5
Merge branch 'main' into rewrite-ex026-to-pygmt
yvonnefroehlich Jun 11, 2023
d102f7d
Improve comment
yvonnefroehlich Jun 11, 2023
6e88c97
Merge branch 'main' into rewrite-ex026-to-pygmt
yvonnefroehlich Jun 18, 2023
51f6373
Fix typo
yvonnefroehlich Jun 18, 2023
c535ac9
Merge branch 'main' into rewrite-ex026-to-pygmt
yvonnefroehlich Jun 21, 2023
f909f19
Fix typo introduction (code review)
yvonnefroehlich Jun 22, 2023
1f40002
Shorten comment (code review)
yvonnefroehlich Jun 22, 2023
c40401b
Remove not required word (code review)
yvonnefroehlich Jun 22, 2023
e6f716d
Add missing word (code review)
yvonnefroehlich Jun 22, 2023
70727e5
Remove not required word (code review)
yvonnefroehlich Jun 22, 2023
b0735ae
Remove colorbar (code review)
yvonnefroehlich Jun 22, 2023
992bd0c
Add colorbar immediately after grdimage (code review)
yvonnefroehlich Jun 22, 2023
116171b
Download grid only once (code review)
yvonnefroehlich Jun 22, 2023
5e4a497
Improve formulation for comment for colorbar argument
yvonnefroehlich Jun 22, 2023
98709d9
Merge branch 'main' into rewrite-ex026-to-pygmt
yvonnefroehlich Jun 22, 2023
f791a08
Reduce step size of survey line
yvonnefroehlich Jun 23, 2023
b142510
Update als comment to larger step size along survey line
yvonnefroehlich Jun 23, 2023
0cc6b9e
Comment code parts related to 'pygmt.grdtrack' out
yvonnefroehlich Jun 24, 2023
68bc2fd
Fix code style for comments
yvonnefroehlich Jun 24, 2023
a467834
Revert step size increase for survey line
yvonnefroehlich Jun 24, 2023
8bda00e
Merge branch 'main' into rewrite-ex026-to-pygmt
yvonnefroehlich Jul 3, 2023
5021879
Merge branch 'main' into rewrite-ex026-to-pygmt
yvonnefroehlich Aug 15, 2023
63b71ab
Un-comment only calculation of 'track_df' via 'grdtrack'
yvonnefroehlich Aug 19, 2023
a9f2e5d
Un-comment plotting 'track_df' via 'data' and 'incols'
yvonnefroehlich Aug 19, 2023
c25a778
Test plotting 'track_df' via 'x' and 'y'
yvonnefroehlich Aug 19, 2023
a5ce14f
Merge branch 'main' into rewrite-ex026-to-pygmt
yvonnefroehlich Aug 19, 2023
355831e
Merge branch 'main' into rewrite-ex026-to-pygmt
yvonnefroehlich Aug 20, 2023
ab5d52b
Test using 'int' with 'data' and 'incols'
yvonnefroehlich Aug 20, 2023
5fb3e49
Test using 'float' with 'data' and 'incols'
yvonnefroehlich Aug 20, 2023
b666712
Redo test changes and use 'x' and 'y'
yvonnefroehlich Aug 20, 2023
e18b6b2
Merge branch 'main' into rewrite-ex026-to-pygmt
yvonnefroehlich Aug 21, 2023
129c3fa
Merge branch 'main' into rewrite-ex026-to-pygmt
yvonnefroehlich Aug 21, 2023
765f2fd
Use '+u°' instead of '+u@.' following PR #2584
yvonnefroehlich Aug 21, 2023
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
138 changes: 138 additions & 0 deletions examples/gallery/images/cross_section.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,138 @@
"""
Cross-section along a transect
==============================
:func:`pygmt.project` and :func:`pygmt.grdtrack` can be used to focus on
a quantity and its variation along a desired survey line.
In this example, the elevation is extracted from a grid provided via
:func:`pygmt.datasets.load_earth_relief`.
The figure consists of two parts, a map of the elevation in the study
area showing the survey line and a Cartesian plot showing the elevation
along the survey line.

*This example is orientated on an example in the GMT/China documentation*:
https://docs.gmt-china.org/latest/examples/ex026/
"""

import pygmt

# Define region of study area
# lon_min, lon_max, lat_min, lat_max in degrees East and North
region_map = [122, 149, 30, 49]

# Create a new pygmt.Figure instance
fig = pygmt.Figure()

# ----------------------------------------------------------------------------
# Bottom: Map of elevation in study area

# Set up basic map
fig.basemap(
region=region_map,
projection="M12c", # Mercator projection with a width of 12 centimeters
frame="af",
)

# Download grid for Earth relief with a resolution of 10 arc-minutes and
# gridline registration [Default]
grid_map = pygmt.datasets.load_earth_relief(
resolution="10m",
region=region_map,
)

# Plot the downloaded grid with color-coding based on the elevation
fig.grdimage(grid=grid_map, cmap="oleron")

# Add a colorbar for the elevation
fig.colorbar(
# Place the colorbar inside the plot (lower-case "j") with justification
# Bottom Right and an offset ("+o") of 0.7 centimeters and
# 0.3 centimeters in x or y directions, respectively
# Move the x label above the horizontal colorbar ("+ml")
position="jBR+o0.7c/0.8c+h+w5c/0.3c+ml",
# Add a box around the colobar with a fill ("+g") in "white" color and
# a transparency ("@") of 30 % and with a 0.8-points thick black
# outline ("+p")
box="+gwhite@30+p0.8p,black",
# Add x and y labels ("+l")
frame=["x+lElevation", "y+lm"],
)

# Choose a survey line
fig.plot(
x=[126, 146], # Longitude in degrees East
y=[42, 40], # Latitude in degrees North
# Draw a 2-points thick red dashed line for the survey line
pen="2p,red,dashed",
)

# Add labels "A" and "B" for the start and end points of the survey line
fig.text(
x=[126, 146],
y=[42, 40],
text=["A", "B"],
offset="0c/0.2c", # Move text 0.2 centimeters up (y direction)
font="15p", # Use a font size of 15 points
)

# ----------------------------------------------------------------------------
# Top: Elevation along survey line

# Shift plot origin 12.5 centimeters to the top
fig.shift_origin(yshift="12.5c")

fig.basemap(
region=[0, 15, -8000, 6000], # x_min, x_max, y_min, y_max
# Cartesian projection with a width of 12 centimeters and
# a height of 3 centimeters
projection="X12c/3c",
# Add annotations ("a") and ticks ("f") as well as labels ("+l")
# at the west or left and south or bottom sides ("WSrt")
frame=["WSrt", "xa2f1+lDistance+u°", "ya4000+lElevation / m"],
)

# Add labels "A" and "B" for the start and end points of the survey line
fig.text(
x=[0, 15],
y=[7000, 7000],
text=["A", "B"],
no_clip=True, # Do not clip text that fall outside the plot bounds
font="10p", # Use a font size of 10 points
)

# Generate points along a great circle corresponding to the survey line
# and store them in a pandas.DataFrame
track_df = pygmt.project(
center="126/42", # Start point of survey line (longitude/latitude)
endpoint="146/40", # End point of survey line (longitude/latitude)
generate="0.1", # Output data in steps of 0.1 degrees
)

# Extract the elevation at the generated points from the downloaded grid
# and add it as new column "elevation" to the pandas.DataFrame
track_df = pygmt.grdtrack(
grid=grid_map,
points=track_df,
newcolname="elevation",
)

# Plot water masses
fig.plot(
x=[0, 15],
y=[0, 0],
fill="lightblue", # Fill the polygon in "lightblue"
# Draw a 0.25-points thick black solid outline
pen="0.25p,black,solid",
close="+y-8000", # Force closed polygon
)

# Plot elevation along the survey line
fig.plot(
x=track_df.p,
y=track_df.elevation,
fill="gray", # Fill the polygon in "gray"
# Draw a 1-point thick black solid outline
pen="1p,black,solid",
close="+y-8000", # Force closed polygon
)

fig.show()