This update includes a fix for a bug affecting autoplot() methods in the case of plotting multiple spectra in the same plot. It also includes improvements to the easy of use through the addition new or enhancements to existing convenience methods and functions. The required version of ‘photobiology’ is now 0.9.28 or higher.

The changes from version 0.3.2, the current CRAN release, are:

  • Make autotitle() the recommended method and deprecate the use of ggtitle_spct(), which remains available for backwards compatibility.
  • Enhance autotitle() to optionally set the caption in addition to title and subtitle of a plot.
  • Add support for setting of the plot caption controlled with the annotations argument of autoplot() methods.
  • Add convenience functions to make easier to modify default arguments used by autoplot() methods through R options: set_annotations_default() and set_w.band_default().
  • Add support for simultaneously adding and removing annotations from the current default by accepting lists of character vectors in addition to character vectors as argument for parameter annotations in autoplot() methods.
  • Add support in multiplot() function for adding a title to the composite figure.
  • Track changes in ‘photobiology’ (>= 0.9.28) adding support for using the "how.measured" attribute in plot titles, subtitles and captions.
  • Use a compute panel function instead of a compute group function in stat_wb_label(), stat_wb_box() and stat_wl_strip(), solving a bug affecting autoplot() methods when called with multiple spectra.

The justification for renaming the ggtitle_spct() function to autotitle() is that the new name is consistent with autoplot() and autolayer() in taking an R object of a specific class as first argument and automatically extracting the information from it.

Documentation web site at

NOTE: The updated package is on its way to CRAN.

Please raise issues concerning bugs or enhancements to this package through Bitbucket at

ggpmisc 0.3.1

After the previous major update to ‘ggpmisc’ (0.3.0), a follow up (0.3.1) with multiple new features and smoothed rough edges for some of the features added in version 3.0.0. Package documentation is available at as a web site.

The enhancements in this and the previous update to ‘ggpmisc’ are made possible by changes to ‘ggplot2’ (>= 3.0.0) made while adding support for sf (simple features).

The functions in ‘ggpmisc’ (>= 0.3.1) are related to different kinds of annotations and insets in ggplots. Annotations of plots with fitted-model equations, fit diagnosis, ANOVA and summary tables, highlighting and labelling of peaks and valleys in curves, and local density-based highlighting or labelling in scatter plots. Additionally specializations of the ggplot() constructor allow on-the-fly conversion of time-series. Two new geoms join geom_table() added in version 0.3.0, geom_plot() and geom_grob(). These three geoms make it possible to add tables, ggplots and arbitrary graphical objects (grobs) as insets to plots respecting the the Grammar of Graphics paradigm.

Inset plot showing means per group.
Inset grobs

A set of new geometries produce marginal annotations: geom_x_margin_point(), geom_y_margin_point(), geom_x_margin_arrow(), geom_y_margin_arrow(), geom_x_margin_grob() and geom_y_margin_grob().

Marginal “points” showing means per group.

Another novel feature is based on the addition of two new aesthetics npcx and npcy, the corresponding scales scale_npcx_continuous() and scale_npcy_continuous(), and several new geometries that make use of then: geom_text_npc(), geom_label_npc(), geom_table_npc(), geom_plot_npc() and geom_grob_npc(). These allow to position insets and annotations relative to the dimensions of the plotting area instead of using native data units. Using "npc" units is more natural for labels or insets that are not directly related to data but that look better if positioned consistently across multiple panels or multiple separately produced plots. One improvement to the stats from earlier versions of ‘ggpmisc’ is the use of these new geoms to achieve more consistent location for insets and labels.

Quadrant counts with panels.
Fitted equations in panels with free y limits.
Inset tables at different positions in different panels.

As in the announcement of the previous version, I have included some example plots taken from the documentation of the package. In all cases annotations are generated automatically, but formatting is flexible.

NOTE: The new version of ‘ggpmisc’ will be soon submitted to CRAN .

ooacquire 0.1.6

Improvements aiming at continuing the expansion of the support of different Ocean Optics spectrometers and of  additional measurement methods.

  • Update acq_irrad_interactive() adding alternative user-interface modes, allowing users to set comment and what.measured attributes, and to construct collections of spectra.
  • Add pre-built calibrations and methods for additional FLAME-S instruments.
  • Improve algorithm for automatic tuning of integration time to achieve faster convergence.
  • Fix various minor bugs.
  • Update vignettes.
  • Test against OmniDriver 1.2.56
  • Update read_ooov_files() for compatibility with ‘readr’ >= 1.2.0 which is now required

Add support for measurement of pulsed light sources (under development)

The new features described below are under development, subject to change without previous notice and not yet well tested!! (double-check any results and please report any bugs by raising an issue!)

Implement support for measuring output from xenon flashes, including use of such flashes as light sources for measurement of spectral transmittance and reflectance. Use of multiple exposures per integration is also supported and the number of exposures stored as metadata is used during later processing. In the case of pulsed light sources the first conversion of RAW spectra is into counts per exposure, and instead of spectral irradiance spectral fluence per exposure is computed. All changes are backwards compatible with raw data acquired with earlier versions of ‘ooacquire’ and the user interface remains unaltered for the measurement of continuous light sources.

  • Add function acq_fluence_interactive() for measuring spectral fluence of pulsed light sources.
  • Add acq_fraction_pulsed_interactive() for measuring transmittance and reflectance using a pulsed light source.

Documentation website is at

Please raise issues concerning bugs or enhancements to this package through Bitbucket at

NOTE: This package is NOT available through CRAN.

This version of the package is available through the r4photobiology repository  and through Bitbucket.


  1. from the binary or source packages from the CRAN-compatible repository at
  2. from sources retrieved from the Git repository at Bitbucket.


devtools::install_bitbucket("aphalo/ooacquire", ref = "0.1.6")

devtools::install_bitbucket("aphalo/photobiology")  # only if not automatically installed/updated

devtools::install_bitbucket("aphalo/photobiologyWavebands")  # only if not automatically installed/updated

devtools::install_bitbucket("aphalo/ggspectra")  # only if not automatically installed/updated

photobiologyInOut 0.4.18

The main changes from version 0.4.17-1 the previous CRAN release, are:

  • Track code breaking change in ‘readr’ (>= 1.2.0)
  • Fix bug in read_oo_pidata() that was preventing reading of Ocean Optics “Raspberry Pi” Flame files with a sequence header line at the top.
  • Add decoding of file header to extract integration time and number of scans to read_oo_pidata().
  • Improve decoding of file header to extract instrument settings in read_oo_jazdata().

Because of code breaking change in package ‘readr’ this version of ‘photobiologyInOut’ requires ‘readr’ >= 1.2.0 to be installed. Function read_oopi_data() from ‘photobiologyInOut’ < 0.4.18 will not work as expected under ‘readr’ >= 1.2.0. (I thank Jim Hester for making a pull request that solved the problem introduced by the change in ‘readr’.

Documentation web site at

NOTE: This version of the package is on its way to CRAN.

Please raise issues concerning bugs or enhancements to this package through Bitbucket at