diff options
-rw-r--r-- | NEWS.md | 4 | ||||
-rw-r--r-- | R/plot.mkinfit.R | 27 | ||||
-rw-r--r-- | man/plot.mkinfit.Rd | 11 |
3 files changed, 26 insertions, 16 deletions
@@ -6,9 +6,7 @@ - The title was changed to `Kinetic evaluations of chemical degradation data` -- `plot.mkinfit`: If a residual plot is requested, show it next to the plot of the fit, not below. This may cause existing code to produce bad-looking plots, but was done to make the next feature possible without increasing code complexity too much. - -- `plot.mkinfit`: Add the possibility to show fits and residual plots separately for the observed variables +- `plot.mkinfit`: Add the possibility to show fits (and residual plots if requested) separately for the observed variables - The main vignette `mkin` was converted to R markdown and updated diff --git a/R/plot.mkinfit.R b/R/plot.mkinfit.R index 6bc64351..317c74a3 100644 --- a/R/plot.mkinfit.R +++ b/R/plot.mkinfit.R @@ -68,16 +68,22 @@ plot.mkinfit <- function(x, fit = x, # Layout should be restored afterwards oldpar <- par(no.readonly = TRUE) - n_plot_cols = if (show_residuals) 2 else 1 - n_plots = n_plot_rows * n_plot_cols - - # Set relative plot heights, so the first and the last plot are the norm - # and the middle plots (if n_plot_rows >2) are smaller by rel.height.middle - rel.heights <- if (n_plot_rows > 2) c(1, rep(rel.height.middle, n_plot_rows - 2), 1) - else rep(1, n_plot_rows) - layout_matrix = matrix(1:n_plots, - n_plot_rows, n_plot_cols, byrow = TRUE) - layout(layout_matrix, heights = rel.heights) + # If the observed variables are shown separately, do row layout + if (sep_obs) { + n_plot_cols = if (show_residuals) 2 else 1 + n_plots = n_plot_rows * n_plot_cols + + # Set relative plot heights, so the first and the last plot are the norm + # and the middle plots (if n_plot_rows >2) are smaller by rel.height.middle + rel.heights <- if (n_plot_rows > 2) c(1, rep(rel.height.middle, n_plot_rows - 2), 1) + else rep(1, n_plot_rows) + layout_matrix = matrix(1:n_plots, + n_plot_rows, n_plot_cols, byrow = TRUE) + layout(layout_matrix, heights = rel.heights) + } else { # else show residuals in the lower third to keep compatibility + layout(matrix(c(1, 2), 2, 1), heights = c(2, 1.3)) + par(mar = c(3, 4, 4, 2) + 0.1) + } } # Replicate legend position argument if necessary @@ -129,6 +135,7 @@ plot.mkinfit <- function(x, fit = x, if (show_residuals) { residuals <- subset(fit$data, variable %in% row_obs_vars, residual) if (maxabs == "auto") maxabs = max(abs(residuals), na.rm = TRUE) + if (!sep_obs) par(mar = c(5, 4, 0, 2) + 0.1) plot(0, type="n", xlim = xlim, ylim = c(-1.2 * maxabs, 1.2 * maxabs), diff --git a/man/plot.mkinfit.Rd b/man/plot.mkinfit.Rd index b80928f7..00b2eca5 100644 --- a/man/plot.mkinfit.Rd +++ b/man/plot.mkinfit.Rd @@ -61,14 +61,18 @@ Should a legend be added to the plot? } \item{show_residuals}{ - Should residuals be shown in the lower third of the plot? + Should residuals be shown? If only one plot of the fits is shown, the + residual plot is in the lower third of the plot? Otherwise, i.e. if + "sep_obs" is given, the residual plots will be located to the right of + the plots of the fitted curves. } \item{maxabs}{ Maximum absolute value of the residuals. This is used for the scaling of the y axis and defaults to "auto". } \item{sep_obs}{ - Should the observed variables be shown in separate subplots? + Should the observed variables be shown in separate subplots? If yes, residual plots + requested by "show_residuals" will be shown next to, not below the plot of the fits. } \item{rel.height.middle}{ The relative height of the middle plot, if more than two rows of plots are shown. @@ -94,9 +98,10 @@ SFO_SFO <- mkinmod(parent = mkinsub("SFO", "m1", full = "Parent"), m1 = mkinsub("SFO", full = "Metabolite M1" )) fit <- mkinfit(SFO_SFO, FOCUS_2006_D, quiet = TRUE, method.modFit = "Marq") plot(fit) +plot(fit, show_residuals = TRUE) # Show the observed variables separately -plot(fit, sep_obs = TRUE) +plot(fit, sep_obs = TRUE, lpos = c("topright", "bottomright")) # Show the observed variables separately, with residuals plot(fit, sep_obs = TRUE, show_residuals = TRUE, lpos = c("topright", "bottomright")) |