-
Notifications
You must be signed in to change notification settings - Fork 214
/
rose.py
214 lines (183 loc) · 7.46 KB
/
rose.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
"""
rose - Plot windrose diagrams or polar histograms.
"""
from pygmt.clib import Session
from pygmt.helpers import (
build_arg_string,
deprecate_parameter,
fmt_docstring,
kwargs_to_strings,
use_alias,
)
@fmt_docstring
@deprecate_parameter("color", "fill", "v0.8.0", remove_version="v0.12.0")
@use_alias(
A="sector",
B="frame",
C="cmap",
D="shift",
Em="vectors",
F="no_scale",
G="fill",
I="inquire",
JX="diameter",
L="labels",
M="vector_params",
Q="alpha",
R="region",
S="norm",
T="orientation",
U="timestamp",
V="verbose",
W="pen",
Z="scale",
b="binary",
d="nodata",
e="find",
h="header",
i="incols",
c="panel",
p="perspective",
t="transparency",
w="wrap",
)
@kwargs_to_strings(R="sequence", c="sequence_comma", i="sequence_comma", p="sequence")
def rose(self, data=None, length=None, azimuth=None, **kwargs):
"""
Plot windrose diagrams or polar histograms.
Takes a matrix, (length,azimuth) pairs, or a file name as input
and plots windrose diagrams or polar histograms (sector diagram
or rose diagram).
Must provide either ``data`` or ``length`` and ``azimuth``.
Options include full circle and half circle plots. The outline
of the windrose is drawn with the same color as
:gmt-term:`MAP_DEFAULT_PEN`.
Full option list at :gmt-docs:`rose.html`
{aliases}
Parameters
----------
data : str or {table-like}
Pass in either a file name to an ASCII data table, a 2-D
{table-classes}.
Use parameter ``incols`` to choose which columns are length and
azimuth, respectively. If a file with only azimuths is given, use
``incols`` to indicate the single column with azimuths; then all
lengths are set to unity (see ``scale="u"`` to set actual
lengths to unity as well).
length/azimuth : float or 1-D arrays
Length and azimuth values, or arrays of length and azimuth
values
orientation : bool
Specifies that the input data are orientation data (i.e., have a
180 degrees ambiguity) instead of true 0-360 degree directions
[Default is 0-360 degrees]. We compensate by counting each record
twice: First as azimuth and second as azimuth +180. Ignored if
``region`` is given as (-90, 90) or (0, 180).
region : str or list
*r0/r1/az0/az1* or [*r0*, *r1*, *az0*, *az1*].
*Required if this is the first plot command*.
Specifies the ``region`` of interest in (*r*, *azimuth*) space.
Here, *r0* is 0 and *r1* is the maximal length in units.
For *az0* and *az1*, specify either (-90, 90) or (0, 180) for
half circle plot or (0, 360) for full circle.
diameter : str
Sets the diameter of the rose diagram. If not given,
then we default to a diameter of 7.5 cm.
sector : float or str
Gives the sector width in degrees for sector and rose diagram.
Default ``0`` means windrose diagram. Append **+r** to draw rose
diagram instead of sector diagram (e.g. ``"10+r"``).
norm : bool
Normalize input radii (or bin counts if ``sector`` is used)
by the largest value so all radii (or bin counts) range from 0
to 1.
frame : str
Set map boundary frame and axes attributes. Remember that *x*
here is radial distance and *y* is azimuth. The ylabel may be
used to plot a figure caption. The scale bar length is determined
by the radial gridline spacing.
scale : float or str
Multiply the data radii by scale. E.g., use ``scale=0.001`` to
convert your data from m to km. To exclude the radii from
consideration, set them all to unity with ``scale="u"``
[Default is no scaling].
fill : str
Selects shade, color or pattern for filling the sectors [Default
is no fill].
cmap : str
Give a CPT. The *r*-value for each sector is used to look-up the
sector color. Cannot be used with a rose diagram.
pen : str
Set pen attributes for sector outline or rose plot, e.g.
``pen="0.5p"``. [Default is no outline]. To change pen used to
draw vector (requires ``vectors``) [Default is same as sector
outline] use e.g. ``pen="v0.5p"``.
labels : str
*wlabel,elabel,slabel,nlabel*.
Specify labels for the 0, 90, 180, and 270 degree marks.
For full-circle plot the default is
``"West,East,South,North"`` and for half-circle the default
is ``"90W,90E,-,0"``. A ``"-"`` in any entry disables that
label (e.g. ``labels="W,E,-,N"``). Use ``labels=""`` to
disable all four labels. Note that the
:gmt-term:`GMT_LANGUAGE` setting will affect the words used.
no_scale : bool
Do NOT draw the scale length bar (``no_scale=True``).
Default plots scale in lower right corner provided ``frame``
is used.
shift : bool
Shift sectors so that they are centered on the bin interval
(e.g., first sector is centered on 0 degrees).
vectors : str
*mode_file*.
Plot vectors showing the principal directions given in
the *mode_file* file.
Alternatively, specify ``vectors`` to compute and plot
mean direction. See ``vector_params`` to control the vector
attributes. Finally, to instead save the computed mean
direction and other statistics, use
``vectors="+wmode_file"``. The eight items saved to
a single record are: *mean_az*, *mean_r*, *mean_resultant*,
*max_r*, *scaled_mean_r*, *length_sum*, *n*, *sign@alpha*,
where the last term is 0 or 1 depending on whether the mean
resultant is significant at the level of confidence set via
``alpha``.
vector_params : str
Used with ``vectors`` to modify vector parameters. For
vector heads, append vector head size [Default is 0, i.e., a
line]. See :gmt-docs:`rose.html#vector-attributes` for
specifying additional attributes. If ``vectors`` is not
given and the current plot mode is to draw a windrose diagram
then using ``vector_params`` will add vector heads to all
individual directions using the supplied attributes.
alpha : float or str
Sets the confidence level used to determine if the mean
resultant is significant (i.e., Lord Rayleigh test for
uniformity) [Default is ``alpha=0.05``]. **Note**: The
critical values are approximated [Berens, 2009] and requires
at least 10 points; the critical resultants are accurate to
at least 3 significant digits. For smaller data sets you
should consult exact statistical tables.
Berens, P., 2009, CircStat: A MATLAB Toolbox for Circular
Statistics, *J. Stat. Software*, 31(10), 1-21,
https://doi.org/10.18637/jss.v031.i10.
{timestamp}
{verbose}
{binary}
{panel}
{nodata}
{find}
{header}
{incols}
{perspective}
{transparency}
{wrap}
"""
kwargs = self._preprocess(**kwargs) # pylint: disable=protected-access
with Session() as lib:
# Choose how data will be passed into the module
file_context = lib.virtualfile_from_data(
check_kind="vector", data=data, x=length, y=azimuth
)
with file_context as fname:
lib.call_module(module="rose", args=build_arg_string(kwargs, infile=fname))