clip
argument to only show contours in an area defined by a polygon.kriging
argument of the contour functions now can be a numeric to control de number of pixels used.FitWave()
and friends improved (#184, @pascaloettli).proj
argument in geom_contour_fill()
and friends now operate over the isolines returned by the isoband package. This might break code that used a custom function to proj
.Published by eliocamp 12 months ago
DivideTimeseries()
function is now defunct.FitLm()
gains a new intercept
argument that allows you to remove the intercept term that is automatically added.Laplacian()
when computing the laplacian of a single variable. (#170, Thanks @pascaloettli)Published by eliocamp over 1 year ago
geom_relief()
and geom_shadow()
now don't have a size aesthetic, since they shouldn't have had it anyway.scale_mag()
is now chosen to be a "pretty" number close to the maximum. This will prevent guides with many unnecesary decimal places (thanks, @PanfengZhang #161).expand
value in sale_x_longitude()
and friends (thanks, @tamas-ferenci, #167).Published by eliocamp about 2 years ago
Smooth2D()
smooths a 2D field (hence the name). There are two smoothing methods. smooth_svd()
computes the SVD of the field and reconstructs it keeping only the leading values that ensures a maximum variance lost. smooth_dct()
computes the Discrete Cosine Transform of the field and sets a proportion of the components to zero.Fixed a bug in geom_streamline()
when plotting multiple fields on the same panel.
Fixes a bug with GetTopography()
on Windows.
Updates documentation to use valid HTML5 per CRAN's new format.
Fixes the "The following aesthetics were dropped during statistical transformation" warning for contours.
Removes ReadNetCDF()
file and URL checking because it didn't work in some cases.
(#164, thanks @pascaloettli)
ReadNetCDF()
not longer uses it to parse dates and times. The homebrewed parser might be more limited, and the wild variety of netCDF files in the wild makes it hard to fully test. Please report any issues you have!Published by eliocamp over 2 years ago
Adds example of scale_y_level()
(@paocorrales, #153).
ReadNetCDF()
now should parse times correctly even if the use non-standard calendars.
This now makes udunits2 and PCICt required to parse time.
Arrays returned by ReadNetCDF(β¦, out = "array")
gain a "dimvalues" attribute which is analogous to dimnames but has the correct types (dates are dates, numerics are numerics, etc...).
EOF()
gains a new engine
argument to chose the function to compute the singular value decomposition.
sdev
component in EOF()
when using base::svd()
in some cases.seasonally()
now returns a Date object even if the input is datetime. This avoids issues when the time component of the input was not all the same.ImputeEOF()
in which the algorithm tried to compute 0 EOFs.Published by eliocamp about 3 years ago
geom_contour2()
gains the ability to draw --and leave space for-- labels! This is finally proper labelling support without having to use a different geom (geom_text_contour()
). Thanks to the isoband package for this.
Following isoband's naming convention, the family of functions that decide where to place labels have been renamed as label_placer_
and the corresponding argument is now label.placer
. The label_placement_
family of functions will be deprecated in future releases.
Published by eliocamp about 3 years ago
discretised scales now work better when passing user-supplied limits.
New functions to use the International Standard Atmosphere to get height from pressure and vice versa, as well as to use as secondary axis.
See ?standard_atmosphere
.
scale_y_level()
and scale_x_level()
now print more breaks by default.
These functions will probably use this transformation instead of the reverse log transformation in a future release.
Translation!
Thanks to @MichaelChirico priceless guidance, metR messages are now translatable and already translated to Spanish.
If you are using R in a Spanish locale you should be getting messages and error in Spanish.
Partial translation to Portuguese is also included.
During the process of translating messages, many messages were improved and made more consistent.
New Function ResidLm()
that returns the residuals of a linear fit.
New function Detrend()
that, you guessed it, returns a (linearly) detrended version of the input vector.
In ReadNetCDF()
, the "vars" argument now can take a function. (#142)
Discretised scales now support user-defined breaks.
seasonally()
result will be on the 15th of the centre month of each season instead of on the 1st. This makes the date more representative of the time span and also solves a bug in which dates on the 31st would return NA
. This is a potentially breaking change.ReadNetCDF()
doesn't fail when reading variables with no dimensions (thanks to @paocorrales, #141).Published by eliocamp over 3 years ago
as.discretised_scale()
is a quick way of created a discretised version of any
continuous scale.
stroke.colour
is now an accepted aesthetic for geom_text_contour()
.
The computations in MixingRatio()
were wrong. Now they are fixed.
I really wanted geom_arrow()
to automatically add the arrow legend, but the
workarounds I managed to write were brittle and couldn't handle even slight
changes in people's code (see https://github.com/eliocamp/metR/issues/130). The definitive
answer is that this is simply not possible due to limitations on how ggplot2 works
(see https://github.com/tidyverse/ggplot2/issues/4291).
This release, then, backtracks those workarounds and tries to accept the things I cannot change.
Published by eliocamp almost 4 years ago
I'm very happy with discretised_scale()
, which is a type of scale which takes a
discrete values that are the result of some discretisation and treats them as
continuous. It's, in a sense, the inverse of the new ggplot2::binned_scale()
.
Whereas. ggplot2::binned_scale()
takes continuous values and then discretises
them, discretised_scale()
takes discrete values which where the result of some
discretisation procedure (such as the levels of geom_contour_fill()
/ggplot2::geom_contour_filled()
)
and allows you to treat them as continuous.
Related to that, geom_contour_fill()
now gains a new computed aesthetic called level_d
,
which is the same as level
but forces ggplot2 to automatically use the new discretised scale.
AnchorBreaks()
gains a bins
argument to mimic the default functionality of
MakeBreaks()
.
New label_placement_minmax()
to label contours at the maximum and minimum
points of a contour (mimicking isoband's behaviour)
geom_contour_tanaka()
now has a (rather experimental) argument smooth
which allows to smooth
the transition between segments.
Fixes error introduced in previous version when geom_arrow()
had mappings other
than dx
and dy
. (Thanks Santiago!)
The level
derived aesthetic from geom_contour_fill()
now returns and ordered factor
with the correct labels that can be interpreted by ggplot2::guide_colorsteps()
. This might
a breaking change!
geom_label_contour()
lives! The previous release rewrote much of the way geom_text_contour()
worked, but I messed up and didn't realised that the new code had broken geom_label_contour()
(to be honest, I'd almost totally forgotten about it :P). (fixes #126, thanks @kongdd)
Published by eliocamp over 4 years ago
FitWave()
and related functions return NA
s when the inputted signal has NA
s.
FitLm()
accepts a weights
argument to perform weighted regression.
ReadNetCDF()
now can read files directly from DAP servers and other urls, and
objects returned by [ncdf4::nc_open()].
ReadNetCDF()
won't try to parse "time" dimensions that are not dates and will tryseasonaly()
is now correctly called seasonally()
. This proves that you don'tPublished by eliocamp over 4 years ago
EPflux()
computes Eliassen-Palm fluxes (experimental).
geom_arrow()
and geom_vector()
should plot faster.
New functions is.full_season()
and seasonaly()
.
FitLm()
returns model $r^2$ and adjusted $r^2$.
FitLm()
adds names to unnamed terms.
New function WaveEnvelope()
that computes... the wave envelope.
geom_contour2()
, geom_contour_fill()
and geom_text_contour()
now accept a global.breaks
argument that controls whether breaks should be computed once using the range of the whole
dataset or once for every grouping (e.g. faceting). TRUE
(the default) ensures that
intervals between contours are comparable between panels. Setting it to FALSE
computes
contours compatible with ggplot2::geom_conotur()
(#109, thanks @freeseek)
A reworked non-equispaced derivative gives better results in Derivate()
.
ReadNetCDF()
will not fail if the first variable was called "v" (yeah, I know.. weird
error related to data.table's non standard evaluation).
Subsets in ReadNetCDF()
won't fail if no element is named (#107, thanks @m-saenger)
Fixed bug in WaveFlux()
(#110, thanks @salvatirehbein)
Published by eliocamp almost 5 years ago
ReadNetCDF()
suports using NA
in subset to refer to max or min value.
ReadNetCDF()
's subset argument supports more complex queries. (see the help
section at?ReadNetCDF()
).
ReadNetCDF()
now has a simple date-time parser that is tried if the udunits2 package
is not installed.
GetSMNData()
gains the ability to cache results in a file.
Derivate()
now can derive in a non-equispaced grid.
geom_contour_fill()
imputation method is fixed for some special cases (#96; thanks @bergmul).
predict.eof()
handles complex value svd correctly.
Accommodates new grid implementation of units (#105 thanks @pmur002).
Published by eliocamp over 5 years ago
New GlanceNetCDF()
function that is an alias for ReadNetCDF(out = "vars")
but now prints a human readable summary of the contents of the NetCDF file.
ReadNetCDF()
is slightly faster and should use less memory.
ReadNetCDF()
supports more complex subsetting operations now.
geom_streamline()
now uses 4th order Runge-Kutta insteaf of plain old Euler. It also draws arrows in the middle of the streamline.
The df
element returned by FitLm()
now has the same length as the rest.
ReadNetCDF()
result will print correctly.Published by eliocamp over 5 years ago
Not a lot of changes in this release. It was mostly forced by a change in sample()
coming to R that broke some tests.
Some bugfixes and a bit of breaking changes that should not affect too many people. Trajectory()
is a new function that, as it says in the tin, computes trajectories. Is similar to geom_streamlines()
but for a time-varying field. Is still not fully documented, but works.
Anomaly()
has a new baseline
argument.
New function Trajectory()
that computes trajectories in time-varying
velocity fields.
ReadNetCDF()
now accepts dates as elements for subset
.
ReadNetCDF()
will read all dates correctly (#91; thanks to @m-saenger).
The es
argument from MixingRatio()
changes to e
, to be consistent with
the rest of the variables. Sorry, thermodynamics is not my forte! (thanks @PaoCorrales)
Arrow heads in geom_arrow()
are now scaled correctly in faceted plots (fixes, #92; thanks to @m-saenger)
Published by eliocamp almost 6 years ago
This version marks the first CRAN release. I feel that the package is now mature enough in robustness (there are tests, arguments are checked and the interface is fairly consistent) and functionality so that I'm confident on people using it.
There has been some changes in the interface of some functions for the sake of
consistency.
In Derivate()
(and it's derivated functions --see what I did there?), the
data
argument has been moved back. This is because this function is intended to
be called inside a data.table
of mutate()
call, where you don't need to
explicitly specify the data.
In EOF()
the dcast-style formula interface has been removed. The data
argument
was also moved back so you can use the n
argument more easily without naming it.
ImputeEOF()
follows the same conventions. The dcast-style interface has been
removed and the data
argument has been moved after the max.eof
argument.
BuildQsWave()
and FitQsWave()
have been removed and should had never even
existed.
The default skip
argument for geom_text_contour()
is now 0.
Removed hemisphere
argument from season()
since the function returns the
trimester so it made no sense.
Contour functions now compute breaks globaly (using all the data) instead of
per panel. This means default intercomparabilty between facetwed plots but also
a considerable deviation from ggplot2::geom_contour()
.
The Between
operators are removed since they were already implemented in
data.table
.
The default geom
for stat_na()
is changed to point
for consistency with
stat_subset()
geom_arrow()
and geom_vector()
scale with vector magnitude.geom_streamline()
for visualizing vector fields.dlon()
, dlat()
, dx()
, dy()
for converting physical units intogeom_contour_tanaka()
that plots illuminated contours.Interpolate()
for bilinear interpolation.FitWave()
with wavenumber 0. Now it rerturns the mean.FitWave()
runs slightly faster and BuildWave()
runs much faster.GeomContourFill
object since it was just a polygon.EOF()
now use factors instead of numbers to identify eachscale_mag()
and guide guide_vector()
for controlling andgeom_arrow()
gains new pivot
agument to control point of rotation andpreserve.dir
to tell if angle should be preserved.stat_contour_fill()
and stat_contour2()
print a warning when no contoursEOF()
now supports estimation of confidence intervals via bootstrap.EOF()
supports varimax rotation. Rotated components are labeled accordingly.geom_relief()
is much faster now (but see package rayshader
).geom_shadow()
for casting shadows in topographic maps.StatContour2
aregeom_contour() + geom_text_contour()
) or running the same plot while tweakingFitLm()
for getting fast estimates of linear fits.FilterWave()
for filtering waves.RepeatCircular()
was deprecated in favour of WrapCircular()
which is moreWrapCircular()
was deprecated in favour of the ggperiodic
package.stat_contour2()
, stat_contour_fill()
and geom_streamlines()
xwrap
/ywrap
toggperiodic
, whichEOF()
gains a fill
argument for sparse-ish data.geom_text_contour()
now has the ability to draw a stroke around text.geom_contour_fill()
now can impute missing values with bivariate interpolation.BuildField()
actually renamed BuildWave()
(which should've happen in the previousas.path()
and added functionality to Interpolate()
that allowsImpute2D()
which is an exported version of the method used bygeom_contour_fill()
to (soft) impute missing values.subset
argument in ReadNetCDF()
now accepts character vectors for timePublished by eliocamp over 6 years ago
GetTopography()
ReadNetCDF()
now can output arrays and vectors.pkgdown
.coriolis()
and coriolis.dy()
.Anomaly()
(can't believe I did that).EOF()
principal componets are numeric instead of "PC1", etc...stat_contour()
created geom_contour_fill()
whichstat_contour_fill()
.stat_na()
for easy masking of NA
values.geom_arrow()
now is geom_vector()
with better documentation and moregeom_arrow()
is a new geom for arrows that preserve direction.ReadNetCDF()
now handles more date formats.Laplacian()
, Divercence()
and Vorticity()
DerivatePhysical()
is removed since it was made redundant by the extendedDerivate()
geom_text_contour()
and geom_label_contour()
for labeling contours.GeostrophicWind()
.ReadNetCDF()
and as.POSIXct
.ReadNetCDF()
now supports timezones via de udunits2
package.stat_contour_fill()
.MakeBreaks()
and AnchorBreaks()
.guide_colorstrip()
displays discretized values of a continuous colorstat_contour_fill()
geom_relief()
for generating relief shading.ReadNetCDF()
gains a subset
argument for subseting data.AnchorBreaks()
is a new way of generating breaks.geom_contour2()
that takes a function as argument in breaks
andgeom_contour_fill()
also does the same.stat_subset()
that makes subsetting data on the fly easier.ReadNetCDF()
can return a keyed data.table.FitQsWave()
and BuildQsWave()
renamed to FitWave()
and BuildWave()
,GetSMNData()
is updated to include the new SMN website and data types.geom_contour2()
and geom_contour_fill()
gain a circular
argument to specifyRepeatCircular()
renamed to RepeatCircular()
.LonLabel()
and LatLabel()
aid labeling latitude and longitude.EOF()
and ImputeEOF()
.