https://github.com/vbaliga/gaussplotr
🔔 Fit, predict, and plot 2D Gaussians in R
https://github.com/vbaliga/gaussplotr
2d-gaussian gaussian gaussian-fit gaussian-interpolation gaussian-plot gaussian-volume plotting r rstats
Last synced: 7 months ago
JSON representation
🔔 Fit, predict, and plot 2D Gaussians in R
- Host: GitHub
- URL: https://github.com/vbaliga/gaussplotr
- Owner: vbaliga
- License: gpl-3.0
- Created: 2020-09-19T20:40:38.000Z (over 5 years ago)
- Default Branch: master
- Last Pushed: 2021-07-29T20:06:12.000Z (over 4 years ago)
- Last Synced: 2025-08-13T10:12:06.213Z (7 months ago)
- Topics: 2d-gaussian, gaussian, gaussian-fit, gaussian-interpolation, gaussian-plot, gaussian-volume, plotting, r, rstats
- Language: HTML
- Homepage: https://vbaliga.github.io/gaussplotR/
- Size: 10.2 MB
- Stars: 4
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.Rmd
- Changelog: NEWS.md
- Contributing: .github/CONTRIBUTING.md
- License: LICENSE.md
- Citation: CITATION.cff
- Codemeta: codemeta.json
Awesome Lists containing this project
README
---
output: github_document
---
```{r opts, include = FALSE}
knitr::opts_chunk$set(
collapse = TRUE,
comment = "#>",
fig.path = "man/figures/README-",
out.width = "100%",
dpi = 300
)
```
# gaussplotR 
[](https://www.repostatus.org/#active)
[](https://github.com/vbaliga/gaussplotR/actions)
[](https://codecov.io/gh/vbaliga/gaussplotR?branch=master)
[](https://joss.theoj.org/papers/10.21105/joss.03074)
[](https://doi.org/10.5281/zenodo.4041073)
[](https://CRAN.R-project.org/package=gaussplotR)
`gaussplotR` provides functions to fit two-dimensional Gaussian functions,
predict values from such functions, and produce plots of predicted data.
## Installation
You can install `gaussplotR` from CRAN via:
``` {r install_cran, eval = FALSE}
install.packages("gaussplotR")
```
Or to get the latest (developmental) version through GitHub, use:
``` {r install_github, eval = FALSE}
devtools::install_github("vbaliga/gaussplotR")
```
## Example
The function `fit_gaussian_2D()` is the workhorse of `gaussplotR`. It uses
`stats::nls()` to find the best-fitting parameters of a 2D-Gaussian fit to
supplied data based on one of three formula choices. The function
`autofit_gaussian_2D()` can be used to automatically figure out the best formula
choice and arrive at the best-fitting parameters.
The `predict_gaussian_2D()` function can then be used to predict values from
the Gaussian over a supplied grid of X- and Y-values (generated here via
`expand.grid()`). This is useful if the original data is relatively sparse and
interpolation of values is desired.
Plotting can then be achieved via `ggplot_gaussian_2D()`, but note that the
`data.frame` created by `predict_gaussian_2D()` can be supplied to other
plotting frameworks such as `lattice::levelplot()`. A 3D plot can also be
produced via `rgl_gaussian_2D()` (not shown here).
```{r example}
library(gaussplotR)
## Load the sample data set
data(gaussplot_sample_data)
## The raw data we'd like to use are in columns 1:3
samp_dat <-
gaussplot_sample_data[,1:3]
#### Example 1: Unconstrained elliptical ####
## This fits an unconstrained elliptical by default
gauss_fit_ue <-
fit_gaussian_2D(samp_dat)
## Generate a grid of X- and Y- values on which to predict
grid <-
expand.grid(X_values = seq(from = -5, to = 0, by = 0.1),
Y_values = seq(from = -1, to = 4, by = 0.1))
## Predict the values using predict_gaussian_2D
gauss_data_ue <-
predict_gaussian_2D(
fit_object = gauss_fit_ue,
X_values = grid$X_values,
Y_values = grid$Y_values,
)
## Plot via ggplot2 and metR
library(ggplot2); library(metR)
ggplot_gaussian_2D(gauss_data_ue)
## And another example plot via lattice::levelplot()
library(lattice)
lattice::levelplot(
predicted_values ~ X_values * Y_values,
data = gauss_data_ue,
col.regions = colorRampPalette(
c("white", "blue")
)(100),
asp = 1
)
#### Example 2: Constrained elliptical_log ####
## This fits a constrained elliptical, as in Priebe et al. 2003
gauss_fit_cel <-
fit_gaussian_2D(
samp_dat,
method = "elliptical_log",
constrain_orientation = -1
)
## Generate a grid of x- and y- values on which to predict
grid <-
expand.grid(X_values = seq(from = -5, to = 0, by = 0.1),
Y_values = seq(from = -1, to = 4, by = 0.1))
## Predict the values using predict_gaussian_2D
gauss_data_cel <-
predict_gaussian_2D(
fit_object = gauss_fit_cel,
X_values = grid$X_values,
Y_values = grid$Y_values,
)
## Plot via ggplot2 and metR
ggplot_gaussian_2D(gauss_data_cel)
```
Should you be interested in having `gaussplotR` try to automatically determine
the best choice of `method` for `fit_gaussian_2D()`, the `autofit_gaussian_2D()`
function can come in handy. The default is to select the `method` that
produces a fit with the lowest `rmse`, but other choices include `rss` and
`AIC`.
```{r autofit}
## Use autofit_gaussian_2D() to automatically decide the best
## model to use
gauss_auto <-
autofit_gaussian_2D(
samp_dat,
comparison_method = "rmse",
simplify = TRUE
)
## The output has the same components as `fit_gaussian_2D()`
## but for the automatically-selected best-fitting method only:
summary(gauss_auto)
```
## Contributing and/or raising Issues
Feedback on bugs, improvements, and/or feature requests are all welcome.
Please see the Issues templates on GitHub to make a bug fix request or feature
request.
To contribute code via a pull request, please consult the Contributing Guide
first.
## Citation
Baliga, VB. 2021. gaussplotR: Fit, predict, and plot 2D-Gaussians in R. Journal of Open Source Software, 6(60), 3074. https://doi.org/10.21105/joss.03074
## License
GPL (>= 3) + file LICENSE
🐢