Changes in version 0.3.10 (2025-09-18) - Added a function ide, as a utility for estimating intrinsic data dimensionality - ggplot2 v4.0.0 pushed breaking changes as they transition to S7 objects; changed tests from expect_equal(class(x), c("gg", "ggplot")) to expect_true(inherits(x, c("ggplot", "ggplot2::ggplot"))) according to https://github.com/tidyverse/ggplot2/issues/6498 - Trivial adjustment to animate_plotly backing out of experimental dev to support plotly subplots, especially for use by cheem::global_view - Trivial adjustment plot_pca_scree test - Tests now use spinifex::save_history instead of verbose tourr::save_history Changes in version 0.3.9 (2025-08-22) - ggplot2 is pushing breaking changes as they transition to S7 objects; changed tests from expect_equal(class(x), c("gg", "ggplot")) to expect_true(inherits(x, c("ggplot", "ggplot2::ggplot"))) according to https://github.com/tidyverse/ggplot2/issues/6498 - Added a check in animate_gganimate asking for gifski to be installed to render to gif (hopefully, preventing some users saving the gif to many png files) - Changed a couple of examples of animate_gganimate to dontrun (from donttest) trying to fix rhub errors Changes in version 0.3.8 (2025-01-08) - New function proto_text_repel implementing ggrepl::geom_text_repel, only works with animate_gganimate - Function proto_text now has more flexible labels and examples using them - Fixed example dataset in run_app, weather and breast cancer - Fixed new ggplot2 warnings in proto_basis1d; aggregated 2 rows to 1 - New function plot_pca quick pca plots - New function plot_pca_scree quick pca plot with scree plot - Fixed issue of erroneous warning about replication length due to row_index = TRUE rather than NULL - Function save_history message is silenced when verbose = FALSE - Safer devMessage for development purposes - Minor documentation cleanup Changes in version 0.3.7 - Changes for packages documentation as requirements changed - Replace size with linetype in line geoms - Replace ..ndensity.. with after_stat(ndensity) in density geoms - Removed length checks from tests as ggplot2 plans a change - Fixed a change in behavior in testthat - Moved gganimate documentation from \\donttest to \\dontrun in alignment with gganimate documentation. (Else some OS builds fail, with no mechanism to troubleshoot) Changes in version 0.3.6 (2022-03-31) - Clean up messages in manual_tour - Add more examples interacting manual_tour and proto_density, and bringing your own basis - Fix a couple of odd cases in basis_olda & .lapply_rep_len - More consistent names and indenting in examples Changes in version 0.3.5 (2022-03-09) - Vignettes point to github urls rather than gifs in repository - proto_basis1d() has an text_offset argument for the horizontal position of text labels - Change roxygen documentation \\dontrun's to \\donttest's - Clarify examples of deprecated functions - License changed to MIT (from CC BY-NC-SA 4.0, apparently not FOSS) Changes in version 0.3.4 (2022-02-18) - Cleaned up both vignettes; include plotly output & removed scroll bars from wide code chunks - Removed forced garbage collection gc() calls, too expensive for the minor issues it tried to mitigate - proto_density() now changes the aspect ratio to 1/2 (y/x), twice as wide - animate_plotly() will change the x scaleratio to 2 (for non plotly::subplot animations) - Changed defaults to map_relative(); position = "left" or "right" is fully off outside of the data and slightly smaller - Adjust text-related proto_*() default; decreasing the text size (5 -> 4) - Adjust line segment-related proto_*() default; decreasing the line size a (1 -> .6) - Adjust filmstrip & facet_wrap_tour(): adds theme for borders to help distinguish facets - Adjust theme_spinifex() to include shading and strip outline consistent with the above point Changes in version 0.3.3 (2022-02-01) - Add do_center_frame = TRUE argument to ggtour(), such that tours don't want too far to the sides as they were in cheem radial tours - Adjust theme_spinifex(): tightening margins, facet strip outlines, and better separating theme elements from ggtour default settings Changes in version 0.3.2 (2022-01-04) - New function: facet_wrap_tour(), for faceting tours - New function: proto_frame_cor2(), adds text for the within-frame correlation squared - New function: append_fixed_y(), add/overwrite data y column to fixed values, such as for the height of predicted values or residuals of a model - New function: draw_basis() static ggplot2 variant of proto_basis, that accepts a basis directly without requiring ggtour initialization - Most data-oriented proto_* functions have row_index argument; allowing for subsetting that is compatible with faceting and appending a fixed y! By default, proto_point() will plot non-selected points in faint grey, behind selected points - theme_spinifex() changed removing the duplicate legend display, fewer warnings, and less frame oddities (geom existence issues) with animate_plotly - Better examples for setting dimensions, resolution, and renders in animate_* functions - Refreshed readme Changes in version 0.3.1 (2021-09-28) - Fixed 'phi issue' where manual tours were not consistent in their initial direction, now always move toward full contribution before 0 contribution. - Interpolation of manual tours now handled in ggtour() synchronizes angle usage with {tourr} tours - manual_tour() and related functions now handle 1D projections - New functions: proto_highlight/1d() for highlighting specific points in ggtours - New function: filmstrip(), creates a ggplot faceting the frames of a ggtour for a static output - New dataset: penguins_na.rm, from palmerpenguins::penguins, removed NA rows & reordered columns - Added argument rownum_index to proto_text, for labeling subsets - Experimental wrapper function spinifex::save_history, muting the noisy execution of tourr::save_history Changes in version 0.3.0 - New ggproto api for visuals, see ?ggplot_tour() to get started!! -- 10x new proto_* functions, essentially geoms_* for animated tours: basis/1d, point, origin/1d, density, text, hex, default/1d. -- 2x animation funcs; animate_plotly() and aniamte_gganimate() -- 2x internal utility functions - New vignette demonstrating this api vignette("ggproto_api", "spinifex") - Shiny app now imports .csv & .rds, code improved, uses new ggproto api -- `run - Fixed a format issue with the BeastCancer_na.rm dataset Changes in version 0.2.8 (2021-04-18) - Vectorized all for loops - manip_var_of(basis) suggests a variable to used based on the rank of the contributions of the basis. Basis_* functions to find features of interest, powered by {Rdimtools}. - basis_olda() - basis_odp() - basis_onpp() - basis_olpp() New util functions: - scale_sd() center and scale each variable by it's standard deviation - scale_01() center and scale each variable to be between [0, 1] - basis_half_circle(), variable agnostic basis with minimal variable dependence - as_history_array(), coerces an array of bases into the same attributes and class as returns of tourr::save_history() Changes in version 0.2.7 (2020-11-18) - Gives deprecated warning when using view_basis() and oblique_basis(), no longer listed in view_frame() documentation - Fixed "radial_tour" shiny app to reflect argument changes - Fixed example run time for render_plotly() going longer than 10 seconds Changes in version 0.2.6 (2020-11-09) - New argument, ggproto, accepts a list of {ggplot2} objects for more control over visual output - New argument, aes_args, accepts a list of arguments to pass into the aes() call within geom_point(). This is used for variable mappings, such as color, but needs to be qualified as this is standard evaluation - New argument, identity_args, accepts a list of arguments to pass call within geom_point(), but outside of aes(). This is used for scalar options or manually mapped vector such as point size or alpha - New datasets, PimaIndiansDiabetes_long & PimaIndiansDiabetes_wide - Fixed the centering of axes across frames - Fixed scale_axes() to automatically scale to data rather than assume the data is scaled to [0, 1] - Changed notation from "slide(s)" to "frame(s)" through-out - Deprecated view_basis() and oblique_basis() in favor of view_frame() - Fixed theta labeling on view_manip_space() - Examples improved (simple case, adding more and more complexity) through-out - Minor code, code comments, spelling, and grammar clean up through-out Changes in version 0.2.5 (2020-07-14) New utility - theme_spinifex(), a ggplot theme, slightly lighter than theme_minimal(). Other changes - Aesthetic arguments, which are now passed directly into geom_point(aes(...)) instead of hard-coded arguments - Removed 'col' (color), 'pch' (point character), 'cex' (point size) and 'alpha' (transparency) from rendering functions. These options are now passed directly into the elipsis, ggplot2::geom_point(...) - Added wrapper for gganimate::anim_save() in render_gganimate() - Added wrapper for htmlwidgets::saveWidget() in render_plotly() - Clarified and more consistent documentation Changes in version 0.2.0 (2020-06-18) Demo shiny app - run_app("radial_tour") New functions To accommodate interactive use, rather than predefined paths: - oblique_basis() - oblique_frame() - run_app() New shiny app! New utility functions - map_absolute() - is_orthonormal() slightly more general than tourr::is_orthonormal() Other changes - Added 'cex' (point size) and 'alpha' transparency arguments to rendering functions - Argument naming and order consistency - Clarified and more consistent documentation - More defensive coding Changes in version 0.1.0 (2019-04-09) Initial submission to CRAN. Vignette: "spinifex" Primary functions - play_tour_path() - play_manual_tour() Primary utility functions - view_basis() - view_manip_space()