[Thread Prev][Thread Next][Index]
Re: [ferret_users] restrict polymark to transect
Le 2015-10-08 Marco a écrit:
> Hello,
>
> I regularly plot transects of model output with observations plotted
> on top of these as dots. So the last command is
>
> go polymark polygon/over Latitude, Depth, myvar circle 1.0
>
> for a transect that is monotonic in latitude. Observational data from
> all longitudes are plotted. This works fine when using only the
> transect observational data. If I use a dataset that includes
> observations at longitudes far away from the transect (but within the
> latitude range of the transect), these are also included on the plot.
>
> While this is expected behaviour, I would like to limit the longitudes
> to close to the transect. So I am thinking of including a criterium
> that limits plotting of points near the transect. How would such a
> criterium look like?
> [...]
Paulo and Ryo suggested that I could define a mask for this. I am
trying to extend this to an arbitrary number of stations with
coordinates (TransLon, TransLat). The coordinates of my data are
(Longitude, Latitude). Of the latter I have many more points, so the
two datasets do not share a common shape, so Ryo's method will not work
in my case.
The allowed domain is the union of subsets of the neighbourhoods of the
transect station coordinates. So for a transect that is monotonic in
latitude, this could be done as follows:
let TransLon = Longitude[d=transect.csv]
let TransLat = Latitude[d=transect.csv]
let dx = 1
let dy = 3
set data many_observations_throughout_the_ocean.csv
let nStations = `TransLon,return=size`
def symb TransMask = (Longitude ge TransLon[i=1]-dx and Longitude le TransLon[i=1]+dx\
and Latitude ge TransLat[i=1]-dy and Latitude le TransLat[i=1]+dy)
repeat/range=2:`nStations`/name=ind ( \
def symb TransMask = ($TransMask) or \
(Longitude ge TransLon[i=`ind`]-dx and Longitude le TransLon[i=`ind`]+dx\
and Latitude ge TransLat[i=`ind`]-dy and Latitude le TransLat[i=`ind`]+dy))
def symb myvar = if ($TransMask) then ($myvar) else 1/0
go polymark polygon/over Latitude, Depth, "($myvar)" circle 1.0
Typically one would choose the variance of the monotonic coordinate
(dy in °) somewhat higher than the other one (dx in °), as you want to
be sure any intermediate points that are more or less on the transect
are plotted, but points far from the transect should not be plotted.
I initialise the definition with the condition for the first set of
station coordinates. Then I add subsequent coordinates with a loop
starting from 2 upto the number of stations, by appending "OR ..." to
the condition. I redefine the myvar symbol and plot that. The
citation marks around ($myvar) are necessary because the symbol
contains spaces and otherwise the POLYGON subcommand only sees the
first IF instead of the whole ($TransMask) criterium as the third and
final argument (interpreting circle 1.0 as POLYMARK arguments).
There is still a problem. With more than 12 stations it appears that I
go beyond the maximum allowed symbol length:
**ERROR: invalid command: symbol substitution makes line too long
I can increase this by several stations by removing whitespace in my
script, but typically I have more than fifty stations that I would like
to plot. What does it mean that the line is too long? I can SAY a
very large string e.g. without any problems.
Marco
[Thread Prev][Thread Next][Index]
Contact Us
Dept of Commerce /
NOAA /
OAR /
PMEL /
Ferret
Privacy Policy | Disclaimer | Accessibility Statement