-
Notifications
You must be signed in to change notification settings - Fork 229
Wrap velo #525
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
Wrap velo #525
Changes from 53 commits
e3c296f
c6e3476
c2b951c
1cf7967
fc7bec8
7b905d7
1fcf089
ac05994
38514ef
fd6e421
4858aff
099a3d6
8c6c0e1
480abd0
98d5ded
dea4b1c
132995a
c908e78
6e3076a
6dff809
e5de366
76c9b28
7dccfa9
1fe7005
e2e956c
8364134
7a9de97
909827a
1e5fe88
cfcae90
92f94f1
0e66deb
437e415
dd24153
cc0ef72
34ad182
90e9e0d
d3850b7
d67bfcd
c90ec47
80743aa
2661e2c
ef3465e
86cf8a0
be959fc
0653349
c9f859d
92feb97
71d3797
9ef3983
88d1c8f
984b4cb
b8a2410
c9c7b66
23e908c
d33f7a5
6b99454
f949f16
1064c82
8a7cb44
da9ee3b
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,42 @@ | ||
""" | ||
Velocity arrows and confidence ellipses | ||
--------------------------------------- | ||
|
||
The :meth:`pygmt.Figure.velo` method can be used to plot mean velocity arrow | ||
weiji14 marked this conversation as resolved.
Show resolved
Hide resolved
|
||
and confidence ellipses. | ||
The example below plots red velocity arrows with light-blue confidence ellipses | ||
outlined in red with the east_velocity x north_velocity used for the station names. | ||
Note that the velocity arrows are scaled by 0.2 and the 39% confidence limit | ||
will give an ellipse | ||
which fits inside a rectangle of dimension east_sigma by north_sigma. | ||
""" | ||
|
||
import pandas as pd | ||
import pygmt | ||
|
||
fig = pygmt.Figure() | ||
df = pd.DataFrame( | ||
data={ | ||
"x": [0, -8, 0, -5, 5, 0], | ||
"y": [-8, 5, 0, -5, 0, -5], | ||
"east_velocity": [0, 3, 4, 6, -6, 6], | ||
"north_velocity": [0, 3, 6, 4, 4, -4], | ||
"east_sigma": [4, 0, 4, 6, 6, 6], | ||
"north_sigma": [6, 0, 6, 4, 4, 4], | ||
"correlation_EN": [0.5, 0.5, 0.5, 0.5, -0.5, -0.5], | ||
"SITE": ["0x0", "3x3", "4x6", "6x4", "-6x4", "6x-4"], | ||
} | ||
) | ||
fig.velo( | ||
data=df, | ||
region=[-10, 8, -10, 6], | ||
pen="0.6p,red", | ||
uncertainty_color="lightblue1", | ||
line=True, | ||
scaling="e0.2/0.39/18", | ||
weiji14 marked this conversation as resolved.
Show resolved
Hide resolved
|
||
frame=["WSne", "2g2f"], | ||
projection="x0.8c", | ||
vector="0.3c+p1p+e+gred", | ||
) | ||
|
||
fig.show() |
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -423,6 +423,7 @@ def _repr_html_(self): | |
solar, | ||
subplot, | ||
text, | ||
velo, | ||
) | ||
|
||
|
||
|
Original file line number | Diff line number | Diff line change | ||||
---|---|---|---|---|---|---|
@@ -0,0 +1,248 @@ | ||||||
""" | ||||||
velo - Plot velocity vectors, crosses, anisotropy bars, and wedges. | ||||||
""" | ||||||
import numpy as np | ||||||
import pandas as pd | ||||||
from pygmt.clib import Session | ||||||
from pygmt.exceptions import GMTInvalidInput | ||||||
from pygmt.helpers import build_arg_string, fmt_docstring, kwargs_to_strings, use_alias | ||||||
|
||||||
|
||||||
@fmt_docstring | ||||||
@use_alias( | ||||||
A="vector", | ||||||
B="frame", | ||||||
C="cmap", | ||||||
D="rescale", | ||||||
E="uncertainty_color", | ||||||
G="color", | ||||||
H="scale", | ||||||
I="shading", | ||||||
J="projection", | ||||||
L="line", | ||||||
N="no_clip", | ||||||
R="region", | ||||||
S="scaling", | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I would prefer this to be 'spec' to be more like the similar parameter in meca and to avoid -ing form aliases, but would understand if you don't want to change this.
Suggested change
|
||||||
U="timestamp", | ||||||
V="verbose", | ||||||
W="pen", | ||||||
X="xshift", | ||||||
Y="yshift", | ||||||
Z="zvalue", | ||||||
maxrjones marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||
c="panel", | ||||||
p="perspective", | ||||||
t="transparency", | ||||||
) | ||||||
@kwargs_to_strings(R="sequence", c="sequence_comma", i="sequence_comma", p="sequence") | ||||||
def velo(self, data=None, **kwargs): | ||||||
r""" | ||||||
Plot velocity vectors, crosses, anisotropy bars, and wedges. | ||||||
|
||||||
Reads data values from files, :class:`numpy.ndarray` or | ||||||
:class:`pandas.DataFrame` and plots the selected geodesy symbol on a | ||||||
map. You may choose from velocity vectors and their uncertainties, | ||||||
rotational wedges and their uncertainties, anisotropy bars, or strain | ||||||
crosses. Symbol fills or their outlines may be colored based on constant | ||||||
parameters or via color lookup tables. | ||||||
|
||||||
Must provide ``data`` and ``scaling``. | ||||||
weiji14 marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||
|
||||||
Full option list at :gmt-docs:`supplements/geodesy/velo.html` | ||||||
|
||||||
{aliases} | ||||||
|
||||||
Parameters | ||||||
---------- | ||||||
data : str or numpy.ndarray or pandas.DataFrame | ||||||
Either a file name, a 2D :class:`numpy.ndarray` or a | ||||||
:class:`pandas.DataFrame` with the tabular data. Note that text columns | ||||||
are only supported with file or pandas DataFrame inputs. | ||||||
|
||||||
scaling: str | ||||||
weiji14 marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||
Selects the meaning of the columns in the data file and the figure | ||||||
to be plotted. In all cases, the scales are in data units per length | ||||||
unit and sizes are in length units (default length unit is controlled | ||||||
by :gmt-term:`PROJ_LENGTH_UNIT` unless **c**, **i**, or **p** is | ||||||
appended). | ||||||
|
||||||
- **e**\ [*velscale*/]\ *confidence*\ [**+f**\ *font*] | ||||||
|
||||||
Velocity ellipses in (N,E) convention. The *velscale* sets the | ||||||
scaling of the velocity arrows. If *velscale* is not given then we | ||||||
read it from the data file as an extra column. The *confidence* sets | ||||||
the 2-dimensional confidence limit for the ellipse, e.g. 0.95 for 95% | ||||||
confidence ellipse. Use **+f** to set the font and size of the text | ||||||
[Default is 9p,Helvetica,black]; give **+f**\ 0 to deactivate | ||||||
labeling. The arrow will be drawn with the pen attributes specified | ||||||
by the ``pen`` option and the arrow-head can be colored via | ||||||
``color``. The ellipse will be filled with the color or shade | ||||||
specified by the ``uncertainty_color`` option [Default is | ||||||
transparent], and its outline will be drawn if ``line`` is selected | ||||||
using the pen selected (by ``pen`` if not given by ``line``). | ||||||
Parameters are expected to be in the following columns: | ||||||
|
||||||
- **1**,\ **2**: longitude, latitude of station | ||||||
- **3**,\ **4**: eastward, northward velocity | ||||||
- **5**,\ **6**: uncertainty of eastward, northward velocities | ||||||
(1-sigma) | ||||||
- **7**: correlation between eastward and northward components | ||||||
- **Trailing text**: name of station (optional) | ||||||
|
||||||
- **n**\ [*barscale*] | ||||||
|
||||||
Anisotropy bars. *barscale* sets the scaling of the bars. If | ||||||
*barscale* is not given then we read it from the data file as an | ||||||
extra column. Parameters are expected to be in the following columns: | ||||||
|
||||||
- **1**,\ **2**: longitude, latitude of station | ||||||
- **3**,\ **4**: eastward, northward components of anisotropy | ||||||
vector | ||||||
|
||||||
- **r**\ [*velscale*/]\ *confidence*\ [**+f**\ *font*] | ||||||
|
||||||
Velocity ellipses in rotated convention. The *velscale* sets the | ||||||
scaling of the velocity arrows. If *velscale* is not given then we | ||||||
read it from the data file as an extra column. The *confidence* sets | ||||||
the 2-dimensional confidence limit for the ellipse, e.g. 0.95 for 95% | ||||||
confidence ellipse. Use **+f** to set the font and size of the text | ||||||
[Default is 9p,Helvetica,black]; give **+f**\ 0 to deactivate | ||||||
labeling. The arrow will be drawn with the pen attributes specified | ||||||
by the ``pen`` option and the arrow-head can be colored via | ||||||
``color``. The ellipse will be filled with the color or shade | ||||||
specified by the ``uncertainty_color`` option [Default is | ||||||
transparent], and its outline will be drawn if ``line`` is selected | ||||||
using the pen selected (by ``pen`` if not given by ``line``). | ||||||
Parameters are expected to be in the following columns: | ||||||
|
||||||
- **1**,\ **2**: longitude, latitude of station | ||||||
- **3**,\ **4**: eastward, northward velocity | ||||||
- **5**,\ **6**: semi-major, semi-minor axes | ||||||
- **7**: counter-clockwise angle, in degrees, from horizontal axis | ||||||
to major axis of ellipse. | ||||||
- **Trailing text**: name of station (optional) | ||||||
|
||||||
- **w**\ [*wedgescale*/]\ *wedgemag* | ||||||
|
||||||
Rotational wedges. The *wedgescale* sets the size of the wedges. If | ||||||
*wedgescale* is not given then we read it from the data file as an | ||||||
extra column. Rotation values are multiplied by *wedgemag* before | ||||||
plotting. For example, setting *wedgemag* to 1.e7 works well for | ||||||
rotations of the order of 100 nanoradians/yr. Use ``color`` to set | ||||||
the fill color or shade for the wedge, and ``uncertainty_color`` to | ||||||
set the color or shade for the uncertainty. Parameters are expected | ||||||
to be in the following columns: | ||||||
|
||||||
- **1**,\ **2**: longitude, latitude of station | ||||||
- **3**: rotation in radians | ||||||
- **4**: rotation uncertainty in radians | ||||||
|
||||||
- **x**\ [*cross_scale*] | ||||||
|
||||||
Strain crosses. The *cross_scale* sets the size of the cross. | ||||||
If *cross_scale* is not given then we read it from the data file as | ||||||
an extra column. Parameters are expected to be in the following | ||||||
columns: | ||||||
|
||||||
- **1**,\ **2**: longitude, latitude of station | ||||||
- **3**: eps1, the most extensional eigenvalue of strain tensor, | ||||||
with extension taken positive. | ||||||
- **4**: eps2, the most compressional eigenvalue of strain tensor, | ||||||
with extension taken positive. | ||||||
- **5**: azimuth of eps2 in degrees CW from North. | ||||||
|
||||||
{J} | ||||||
{R} | ||||||
vector : bool or str | ||||||
Modify vector parameters. For vector heads, append vector head *size* | ||||||
[Default is 9p]. See | ||||||
:gmt-docs:`supplements/geodesy/velo.html#vector-attributes` for | ||||||
specifying additional attributes. | ||||||
{B} | ||||||
{CPT} | ||||||
rescale : str | ||||||
can be used to rescale the uncertainties of velocities | ||||||
(``scaling='e'`` and ``scaling='r'``) and rotations | ||||||
weiji14 marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||
(``scaling='w'``). Can be combined with the ``confidence`` variable. | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||
uncertainty_color : str | ||||||
Sets the color or shade used for filling uncertainty wedges | ||||||
(``scaling='w'``) or velocity error ellipses (``scaling='e'`` or | ||||||
weiji14 marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||
``scaling='r'``). If ``uncertainty_color`` is not specified, the | ||||||
weiji14 marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||
uncertainty regions will be transparent. **Note**: Using ``cmap`` and | ||||||
``zvalue='+e'`` will update the uncertainty fill color based on the | ||||||
selected measure in ``zvalue`` [magnitude error]. More details at | ||||||
:gmt-docs:`cookbook/features.html#gfill-attrib`. | ||||||
color : str | ||||||
Select color or pattern for filling of symbols [Default is no fill]. | ||||||
**Note**: Using ``cmap`` (and optionally ``zvalue``) will update the | ||||||
symbol fill color based on the selected measure in ``zvalue`` | ||||||
[magnitude]. More details at | ||||||
:gmt-docs:`cookbook/features.html#gfill-attrib`. | ||||||
scale : float or bool | ||||||
[*scale*]. | ||||||
Scale symbol sizes and pen widths on a per-record basis using the | ||||||
*scale* read from the data set, given as the first column after the | ||||||
(optional) *z* and *size* columns [Default is no scaling]. The symbol | ||||||
size is either provided by ``scaling`` or via the input *size* column. | ||||||
weiji14 marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||
Alternatively, append a constant *scale* that should be used instead of | ||||||
reading a scale column. | ||||||
shading : float or bool | ||||||
*intens*. | ||||||
Use the supplied *intens* value (nominally in the -1 to +1 range) to | ||||||
modulate the symbol fill color by simulating illumination [Default is | ||||||
none]. If *intens* is not provided we will instead read the intensity | ||||||
from an extra data column after the required input columns determined | ||||||
by ``scaling``. | ||||||
weiji14 marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||
line: str | ||||||
[*pen*\ [**+c**\ [**f**\|\ **l**]]]. | ||||||
Draw lines. Ellipses and rotational wedges will have their outlines | ||||||
drawn using the current pen (see ``pen``). Alternatively, append a | ||||||
separate pen to use for the error outlines. If the modifier **+cl** is | ||||||
appended then the color of the pen is updated from the CPT (see | ||||||
``cmap``). If instead modifier **+cf** is appended then the color from | ||||||
the cpt file is applied to error fill only [Default]. Use just **+c** | ||||||
to set both pen and fill color. | ||||||
no_clip: bool or str | ||||||
Do NOT skip symbols that fall outside the frame boundary specified | ||||||
by ``region``. [Default plots symbols inside frame only]. | ||||||
{U} | ||||||
{V} | ||||||
pen : str | ||||||
[*pen*][**+c**\ [**f**\|\ **l**]]. | ||||||
Set pen attributes for velocity arrows, ellipse circumference and fault | ||||||
plane edges. [Defaults: width = default, color = black, style = solid]. | ||||||
If the modifier **+cl** is appended then the color of the pen is | ||||||
updated from the CPT (see ``cmap``). If instead modifier **+cf** is | ||||||
appended then the color from the cpt file is applied to symbol fill | ||||||
only [Default]. Use just **+c** to set both pen and fill color. | ||||||
{XY} | ||||||
zvalue : str | ||||||
maxrjones marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||
[**m**\|\ **e**\|\ **n**\|\ **u**\ ][**+e**]. | ||||||
Select the quantity that will be used with the CPT given via ``cmap`` | ||||||
to set the fill color. Choose from **m**\ agnitude (vector magnitude | ||||||
or rotation magnitude), **e**\ ast-west velocity, **n**\ orth-south | ||||||
velocity, or **u**\ ser-supplied data column (supplied after the | ||||||
required columns). To instead use the corresponding error estimates | ||||||
(i.e., vector or rotation uncertainty) to lookup the color and paint | ||||||
the error ellipse or wedge instead, append **+e**. | ||||||
{c} | ||||||
{p} | ||||||
{t} | ||||||
""" | ||||||
kwargs = self._preprocess(**kwargs) # pylint: disable=protected-access | ||||||
|
||||||
if "S" not in kwargs or ("S" in kwargs and not isinstance(kwargs["S"], str)): | ||||||
raise GMTInvalidInput("Scaling is a required argument and has to be a string.") | ||||||
weiji14 marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||
|
||||||
if isinstance(data, np.ndarray) and not pd.api.types.is_numeric_dtype(data): | ||||||
raise GMTInvalidInput( | ||||||
"Text columns are not supported with numpy.ndarray type inputs. " | ||||||
"They are only supported with file or pandas.DataFrame inputs." | ||||||
) | ||||||
|
||||||
with Session() as lib: | ||||||
# Choose how data will be passed in to the module | ||||||
file_context = lib.virtualfile_from_data(check_kind="vector", data=data) | ||||||
|
||||||
with file_context as fname: | ||||||
arg_str = " ".join([fname, build_arg_string(kwargs)]) | ||||||
lib.call_module("velo", arg_str) |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
outs: | ||
- md5: 0d50fb17d52af222b890d44fbd9050c4 | ||
size: 48104 | ||
path: test_velo_numpy_array_numeric_only.png |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
outs: | ||
- md5: fc51d80c438a1961f700c68e207ecc3b | ||
size: 44161 | ||
path: test_velo_pandas_dataframe.png |
Uh oh!
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Just one last-minute comment:
This gallery example should be put in the "Seismology and Geodesy" category.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
You're lucky, I was just about to merge this in. Looking closely, I'm actually more tempted to put this under "Lines and vectors" as there doesn't seem to be anything seismology or geodetic about
velo
(though I'm not experienced in either of those fields).There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The "velo" module is in the "geodesy" supplement (https://docs.generic-mapping-tools.org/dev/supplements/geodesy/velo.html), and the input columns like "eastward, northward velocity, and uncertainty of eastward, northward velocities" are also specific to geodesy applications.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Fair enough, had a closer read at the Geodesy wikipedia page page and it seems to fit. I'll move the gallery example.