|
| 1 | +""" |
| 2 | +Horizontal and vertical lines |
| 3 | +============================= |
| 4 | +
|
| 5 | +The :meth:`pygmt.Figure.hlines` and :meth:`pygmt.Figure.vlines` methods allow to plot |
| 6 | +horizontal and vertical lines in Cartesian, geographic and polar coordinate systems. |
| 7 | +""" |
| 8 | + |
| 9 | +# %% |
| 10 | +# Cartesian coordinate system |
| 11 | +# --------------------------- |
| 12 | +# In Cartesian coordinate systems lines are plotted as straight lines. |
| 13 | + |
| 14 | +import pygmt |
| 15 | + |
| 16 | +fig = pygmt.Figure() |
| 17 | + |
| 18 | +fig.basemap( |
| 19 | + region=[0, 10, 0, 10], projection="X10c/10c", frame=["+tCartesian hlines", "af"] |
| 20 | +) |
| 21 | + |
| 22 | +# Add a horizontal line at y=9 |
| 23 | +fig.hlines(y=9, pen="1.5p,red3", label="Line 1") |
| 24 | +# Add a horizontal line at y=8 with x from 2 to 8 |
| 25 | +fig.hlines(y=8, xmin=2, xmax=8, pen="1.5p,gray30,-", label="Line 2") |
| 26 | +# Add two horizontal lines at y=6 and y=7 both with x from 3 to 7 |
| 27 | +fig.hlines(y=[6, 7], xmin=3, xmax=7, pen="1.5p,salmon", label="Lines 3 & 4") |
| 28 | +# Add two horizontal lines at y=4 and y=5 both with x from 4 to 9 |
| 29 | +fig.hlines(y=[4, 5], xmin=4, xmax=9, pen="1.5p,black,.", label="Lines 5 & 6") |
| 30 | +# Add two horizontal lines at y=2 and y=3 with different x limits |
| 31 | +fig.hlines( |
| 32 | + y=[2, 3], xmin=[0, 1], xmax=[7, 7.5], pen="1.5p,dodgerblue3", label="Lines 7 & 8" |
| 33 | +) |
| 34 | +fig.legend(position="JBR+jBR+o0.2c", box="+gwhite+p1p") |
| 35 | + |
| 36 | +fig.shift_origin(xshift="w+2c") |
| 37 | + |
| 38 | +fig.basemap( |
| 39 | + region=[0, 10, 0, 10], projection="X10c/10c", frame=["+tCartesian vlines", "af"] |
| 40 | +) |
| 41 | +# Add a vertical line at x=1 |
| 42 | +fig.vlines(x=1, pen="1.5p,red3", label="Line 1") |
| 43 | +# Add a vertical line at x=2 with y from 2 to 8 |
| 44 | +fig.vlines(x=2, ymin=2, ymax=8, pen="1.5p,gray30,-", label="Line 2") |
| 45 | +# Add two vertical lines at x=3 and x=4 both with y from 3 to 7 |
| 46 | +fig.vlines(x=[3, 4], ymin=3, ymax=7, pen="1.5p,salmon", label="Lines 3 & 4") |
| 47 | +# Add two vertical lines at x=5 and x=6 both with y from 4 to 9 |
| 48 | +fig.vlines(x=[5, 6], ymin=4, ymax=9, pen="1.5p,black,.", label="Lines 5 & 6") |
| 49 | +# Add two vertical lines at x=7 and x=8 with different y limits |
| 50 | +fig.vlines( |
| 51 | + x=[7, 8], ymin=[0, 1], ymax=[7, 7.5], pen="1.5p,dodgerblue3", label="Lines 7 & 8" |
| 52 | +) |
| 53 | +fig.legend() |
| 54 | + |
| 55 | +fig.show() |
| 56 | + |
| 57 | +# %% |
| 58 | +# Geographic coordinate system |
| 59 | +# ---------------------------- |
| 60 | +# The same can be done in geographic coordinate systems where "horizontal" means lines |
| 61 | +# are plotted along parallels (constant latitude) while "vertical" means lines are |
| 62 | +# plotted along meridians (constant longitude). |
| 63 | + |
| 64 | +fig = pygmt.Figure() |
| 65 | + |
| 66 | +fig.basemap(region="g", projection="R15c", frame=["+tGeographic hlines", "af"]) |
| 67 | +# Add a line at 70°N |
| 68 | +fig.hlines(y=70, pen="1.5p,red3", label="Line 1") |
| 69 | +# Add a line at 50°N with longitude limits at 20°E and 160°E |
| 70 | +fig.hlines(y=50, xmin=20, xmax=160, pen="1.5p,dodgerblue3", label="Line 2") |
| 71 | +# Add a line at 30°S with longitude limits at 60°E and 270°E |
| 72 | +fig.hlines(y=-30, xmin=60, xmax=270, pen="1.5p,gray30,-", label="Line 3") |
| 73 | +fig.legend() |
| 74 | + |
| 75 | +fig.shift_origin(xshift="w+2c") |
| 76 | + |
| 77 | +fig.basemap(region="g", projection="R15c", frame=["+tGeographic vlines", "af"]) |
| 78 | +# Add a line at 70°E |
| 79 | +fig.vlines(x=70, pen="1.5p,red3", label="Line 1") |
| 80 | +# Add a line at 20°E with latitude limits at 50°S and 70°N |
| 81 | +fig.vlines(x=120, ymin=-50, ymax=70, pen="1.5p,dodgerblue3", label="Line 2") |
| 82 | +# Add a line at 230°E with latitude limits at 70°S and 80°N |
| 83 | +fig.vlines(x=230, ymin=-70, ymax=80, pen="1.5p,gray30,-", label="Line 3") |
| 84 | +fig.legend() |
| 85 | + |
| 86 | +fig.show() |
| 87 | + |
| 88 | +# %% |
| 89 | +# Polar coordinate system |
| 90 | +# ----------------------- |
| 91 | +# When using polar coordinate systems "horizontal" means lines are plotted as arcs along |
| 92 | +# a constant radius while "vertical" means lines are plotted as straight lines along |
| 93 | +# radius at a specified azimuth. |
| 94 | + |
| 95 | +fig = pygmt.Figure() |
| 96 | + |
| 97 | +fig.basemap(region=[0, 360, 0, 1], projection="P10c", frame=["+tPolar hlines", "af"]) |
| 98 | +# Add a line along radius=0.8 |
| 99 | +fig.hlines(y=0.8, pen="1.5p,red3", label="Line 1") |
| 100 | +# Add a line along radius=0.5 with azimuth limits at 30° and 160° |
| 101 | +fig.hlines(y=0.5, xmin=30, xmax=160, pen="1.5p,dodgerblue3", label="Line 2") |
| 102 | +# Add a line along radius=0.25 with azimuth limits at 60° and 270° |
| 103 | +fig.hlines(y=0.25, xmin=60, xmax=270, pen="1.5p,gray30,-", label="Line 3") |
| 104 | +fig.legend() |
| 105 | + |
| 106 | +fig.shift_origin(xshift="w+2c") |
| 107 | + |
| 108 | +fig.basemap(region=[0, 360, 0, 1], projection="P10c", frame=["+tPolar vlines", "af"]) |
| 109 | +# Add a line along azimuth=120° |
| 110 | +fig.vlines(x=120, pen="1.5p,red3", label="Line 1") |
| 111 | +# Add a line along azimuth=190° with radius limits at 0.2 and 0.8 |
| 112 | +fig.vlines(x=190, ymin=0.2, ymax=0.8, pen="1.5p,dodgerblue3", label="Line 2") |
| 113 | +# Add a line along azimuth=320 with radius limits at 0.5 and 0.9 |
| 114 | +fig.vlines(x=320, ymin=0.5, ymax=0.9, pen="1.5p,gray30,-", label="Line 3") |
| 115 | +fig.legend() |
| 116 | + |
| 117 | +fig.show() |
0 commit comments