lessR version 4.5.7, Nov 3, 2026

Updates

Vignettes: The examples now exceed the size allowed for a package installation, so the package includes a single vignette, an introduction to lessR. It links to the full set of examples at https://dgerbing.github.io/Vignettes/.

X(): New parameter horiz, as in Chart(), sets the orientation of the bars, boxes, or curves.

X() VBS plot: With facet, the strip layer is no longer jittered by default when no value repeats within a panel, as the points cannot overlap. Values repeated across the levels of facet fall in separate panels. Repetitions across the groups of by, which share a panel, are still jittered.

Chart() and X() interactive display: The add annotations also draw on the plotly bar chart, histogram, density plot, and frequency polygon, where a coordinate on the category axis of a bar chart is a bar number. The base R density plot also now draws them.

Chart() bar chart: An ordered factor is again drawn with the theme’s sequential palette, light to dark in the order of its levels.

Chart(stack100=TRUE): Cramér’s V and the chi-square test of independence are no longer displayed, as they describe the counts rather than the proportions drawn. Both remain in the returned object.

Chart(stack100=TRUE): The value axis is named for the variable the bars divide, no longer also for the by variable, which the legend names.

Chart(stack100=TRUE): The value axis now reads “Proportion within” rather than “Cell % within”, matching its scale of 0 to 1.

Chart() bar chart: With beside=TRUE, the bar labels now show the value of the plotted statistic rather than a percentage of the sum of the statistics.

Chart() bar chart: A value label on a grouped bar is now shrunk to fit the bar, or left out if it cannot fit legibly.

Chart(form="profile"): rotate_x, rotate_y, and offset now apply.

Chart(): New forms "mosaic" and "assoc", the Plotly mosaic plot and association plot of x and one or more by variables. With residuals=TRUE, each tile is shaded by its Pearson residual from independence.

Chart(form="dot") interactive display: With row_names on a horizontal dot plot, the category axis has no title unless xlab names it, as on the base R dot plot and the bar chart, rather than the title row_names.

Chart(form="dot") paired dot plot: With a theme of one discrete fill color, such as "gray", each series is drawn in a shade of the theme’s palette. The row_names axis has no title unless xlab names it.

Chart() cross-tabulation: When x or by has only one level present, such as within a panel of facet, the analysis notes that Cramér’s V and the chi-square test of independence are not possible, rather than display a Cramér’s V of NaN and a test with 0 degrees of freedom.

Chart(): A level of a factor x with no data no longer halts the chart, as empty categories are dropped.

Chart(form="profile"): origin_y now sets where the value axis begins, as for the dot chart, including for a faceted profile.

Chart(form="treemap"), Chart(form="icicle"): Each form now draws itself rather than a sunburst.

Chart(form="treemap"), Chart(form="icicle"): fill now accepts the name of a sequential palette, such as "greens", with larger values darker.

Chart(form="pie"): hole now renders at the requested size, with the slice labels turned off and a message when there is no room for them. The default is now 0.62.

Chart(form="dot"): No title is drawn unless main is specified.

Chart(form="dot"): The value axis begins at zero. Specify origin_x, or origin_y with horiz=FALSE, for a different origin.

Chart(form="dot"): The categories are now on the vertical axis, following Cleveland’s dot plot. Specify horiz=FALSE for the previous orientation.

Chart(form="dot"): A paired dot plot labels the value axis with the aggregated quantity and heads the legend with the by variable, so no title is drawn.

Chart(form="dot"): A paired dot plot is ordered by the difference between the pair, and the summary table adds the difference as a row, Diff. Specify sort and origin_x to override.

Chart(), X(): Parameter lab_adjust is renamed label_adjust, as already in XY().

Chart(), X(), XY(): The message that refuses a vector of by variables now explains that the first by variable takes the color encoding, and names facet as the alternative.

Chart(form="radar"): The message that halts when a combination of x and by has no cases is now formatted as a standard lessR message.

Chart(form="profile"): facet is now available.

Chart(): The multi-item stacked chart now accepts facet, as in Chart(m01:m05, facet=Gender).

Chart(): New form, form="profile", connects one point for each level of x, and with a by variable draws an interaction plot.

Chart(form="dot"): Now accepts a by variable, though not together with facet.

Chart(): The console suggestions now list form="dot" and form="profile".

Chart(), X(), XY(): No longer take ..., so a name that is not a parameter, or an abbreviated name, is rejected. In XY(), size and shape remain only to name their replacements, pt_size and pt_shape.

Chart(), X(), XY(): A style parameter given in the call, such as axis_size, is now reported by R as an unused argument. Set style parameters with style().

Chart(), X(), XY(): type, renamed form in 4.5.6, remains a parameter only to name its replacement.

Chart(): A numeric x with more than 12 distinct values and no y now displays an advisory naming X() for a continuous variable.

X() histogram: With bin_width specified and no bin_start, the first bin now contains data rather than the histogram beginning with empty bins. Applies also to the faceted histogram, the density plot, and the frequency polygon.

X() VBS summary tables: The statistics are now computed from the data as read rather than from the jittered strip points, so they are exact and reproducible.

X() VBS forms: The function now returns its output, out_stats and out_pivot, rather than NULL.

X() and Chart() text output: The --- variable --- heading now includes the variable label.

X() violin plot: Parameter bw now sets the bandwidth by itself, and a bandwidth given without bw also applies to form="violin" and form="vbs".

X() faceted histogram: Every panel now shares one set of bins, derived from all of the data, so the panels can be compared.

X(form="density"): kind="normal" and kind="both" now apply to the plotly display, with a normal curve fit to each group of a by variable.

X(form="vbs"): The strip points of the by groups no longer vary their shape. New parameter pt_shape sets the shape, with "vary" restoring the previous display.

X(): The violin, box, and strip layers may be named in any order and case, as form="vs", or by a single letter, as form="v".

XY() run chart: XY(.index, Y, data=NULL) now plots a run chart of a vector Y in the global environment.

XY() interactive display: The add annotations, including add="labels", now draw on the plotly scatterplot and time series, not only on the base R plot.

XY() interactive display: The plotly scatterplot now draws any pt_shape or out_shape, R’s codes 0 to 25 or a single character, rather than a filled circle, and draws a shape for each level of a by variable.

XY() loess fit: New parameter fit_degree_loess sets the degree of a loess curve, passed to loess().

XY() loess fit: Parameter span is renamed fit_span_loess, with the former name retained to report the change.

XY() fit line: A fit line, and its fit statistics, now apply to each variable of a multiple-variable plot, not just the first.

XY() variable legend: The legend beneath a plot of multiple x variables no longer loses the bottom of its text at a larger font_size.

XY() size legend: The title of a pt_size legend is no longer clipped at a larger font_size.

XY() size legend: Parameter legend_title now names the size legend, as it already named a by legend.

XY(), Regression(): Parameter plot_errors is renamed fit_errors.

XY(): Parameters segments_x and segments_y are removed. A segment from each point to an axis belongs to the dot plot of a categorical variable, Chart(form="dot"), and XY() now plots only continuous variables. Either name in a call to XY() halts with a message that says so.

XY() time series: ts_unit now applies to a faceted display.

XY() time series: facet now applies to a forecast, with every panel on one scale.

XY() time series: A by variable with ts_ahead now halts, as a forecast has no overlay channel.

XY(): The legend room for a vector of x or y variables now grows with the font size, so longer names no longer run off the right edge.

XY(), X(): The value-axis label of the base R display sits closer to the axis, as ylab_adj is now applied.

XY() time series: A vector of y variables now draws the interactive plotly display, except with ts_stack.

XY() time series: A supplied ylab now names the value axis.

XY() time series: Rows out of date order are now sorted by date for the plot, rather than connected back and forth in time. Dates that repeat within a series are reported as more than one series.

XY() time series: The plotly display labels the value axis as the base R display does, such as Total Sales by Year.

XY() time series: With a vector of y variables, the value-axis label no longer lists the variables, such as Total by Year, which the legend names.

XY(): Parameter line_width now applies to the plotly display, where line_width=0 removes the segments.

XY(): New keywords .normal, .lognormal, .exponential, and .uniform in the x role draw a quantile-quantile chart, as in XY(.normal, Salary).

XY(): Keywords in the x role, such as .index and .normal, are matched without regard to case.

XY() scatterplot matrix: The cells can now render as form="contour" or form="smooth".

XY(form="sunflower"): Now accepts facet, as in XY(m01, m02, facet=Gender).

XY(): The sunflower plot is now selected with form="sunflower", and still with pt_shape="sunflower".

XY(): Two different vectors for x and y now halt, naming the scatterplot matrix and the multi-series overlay as alternatives.

XY(): fit or ellipse with form="hexbin" now halts with a message naming the forms that accept them.

Regression() scatterplot and analysis of covariance plot: The tick labels now sit close to the axis, as in XY(), rather than running into the axis label, most visibly in pdf output.

Regression() and ANOVA(): Parameter pdf is replaced by pdf_file, the stem of the file names, one pdf file per chart named by the chart, so a second analysis no longer overwrites the first. The names match those of the Python version, lessPython.

Logit(): Like Regression(), the text output is returned as separate pieces, such as r$out_estimates and r$out_odds, displayed in full when the result is not assigned. The returned object remains the fitted glm model.

ANOVA() two-way and randomized blocks: The marginal means display the levels as named, such as 00mg rather than X00mg, and without a row label.

Correlation(): New parameter filter selects the rows to analyze, as in X(), ttest(), ANOVA(), and Regression().

Read() native R file: With format="R", a name without a file type now reads the .rda file of that name, so the name that wrote a file with Write() reads it back.

Read() csv: An empty field of a character variable is now read as missing, as is a single blank, the convention of Excel and most software that writes csv files.

Read(): New parameter to_tibble returns the data as a tibble, with any row names as the first column, rowname. The tibble package is added to Suggests.

Read(): SAS and Stata files are now returned as a base R data frame, as every other format already was.

Read(): format="prn" now reads a space-separated text file of any name, and the message for an unrecognized format lists every accepted value.

Write(): format="Stata", or the .dta file type, writes a Stata data file, with any row names written as the first variable, RowName.

Read() and Write(): Both accept format="text" and format="txt", and for Read() either detects a tab or comma separator.

Write(): An object other than a data frame or matrix, such as style(get=TRUE), can now be written with format="R".

Read(): An Excel or SPSS column of whole numbers is converted to integer only when every value fits a 32-bit integer, so large values are no longer lost as NA.

Read(): The test of whether an Excel column holds whole numbers now reads the whole column rather than its first 50 rows, so later fractional values are no longer truncated.

getColors(): The palettes "heat_hcl" and "terrain_hcl" now draw as colorspace defines them, as c and l are passed only when specified.

getColors(), showPalettes(), and a palette name given to fill or color: Five newer wesanderson palettes are now recognized, and the lists of palettes now agree everywhere.

getColors(): New palette "inferno", of the viridis family.

style("gray"): The confidence band about a fit line is lighter, an opacity of 32 rather than 40, so overlapping bands do not read as data.

style("gray"): Two series are drawn in grays set further apart, gray70 and gray30 in place of gray62 and gray40.

style(): New parameters sub_color and sub_size set the color and font size of the subtitle.

style(): New parameter font_family sets the font family of all plotted text, such as "serif", for base R, lattice, and plotly.

style(): segment_color, when specified, now also colors the line that connects successive points of a single series, as in a run chart or time series, with the points still drawn in color. Unspecified, the line is drawn in color as before.

Faceted graphics: Panels now fill top-down and left-to-right, in reading order, as in ggplot2. Affects the lattice-based facets of XY(), X(), and Chart().

Axis labels turned a quarter turn: rotate_x=90 now draws the whole of a long label, with the bottom margin sized to fit.

Data: New data set dataSalesQtr, read with Read("SalesQtr"), quarterly sales from 2020 through 2025 with advertising and price.

Bug Fixes

Chart(form="bubble") with multiple x variables: The table of counts is now headed “Frequencies of Responses by Variable”.

Chart(): stat_x="proportion" now applies to the dot plot, the profile, the radar chart, and the bubble plot, with the proportions taken within each level of by.

Chart(): With a by variable, a theme given in the call now colors the levels across the full range of its palette.

Chart(form="treemap"), Chart(form="icicle"): With facet, a sequential palette named in fill, such as "greens", now colors every panel.

Chart(), X(), XY(): Parameter sub now draws a subtitle on the interactive Plotly displays.

Chart() bar chart: labels_cut now applies to the interactive Plotly bar chart.

Chart(form="pie"): fill now accepts the name of a palette, such as "blues" or "viridis", as it does for the bar chart, where it had halted with invalid color name. A sequential palette shades each slice by its value, larger darker, as for the treemap.

Chart(form="dot"): The value axis of a paired dot plot of a vector of y variables reads “Pre & Post” rather than “c(Pre, Post)”.

Chart(form="dot"): A faceted dot plot with a by variable names the value axis for its statistic, titles the legend, and orders the categories alphabetically in every panel.

Chart() summary table: With both by and facet, the dimensions are named for the variables, and a cell with no data is left empty rather than reported as 0.00.

Chart() faceted bar chart: With a by variable, the counts are now reported as a cross-tabulation of x with by for each panel.

Chart() faceted bar chart: With a by variable and a stat, the Plotted Values list every group, not just the first.

Chart(form="dot"): The value axis of a paired dot plot of unaggregated values is now labeled.

Chart(form="dot"): A faceted dot plot labels both axes.

Chart(form="dot"): The value axis is labeled as in the other displays, such as 120K, without an extra tick step beyond the data.

Chart(form="dot"): The paired dot plot joins the two values with a segment rather than drawing to the value axis.

Chart(form="dot"): A numeric x with repeated values and no y, such as a class coded 1, 2, 3, is now counted, as by the other forms, where the call had halted asking for a y variable.

Chart(): The refusal of a summary table with missing data now names the variable, and na_group_show=FALSE in pivot() as the usual source.

Chart(): stat with facet no longer halts, and the console reports the plotted values.

Chart(): The faceted bar chart, dot chart, and bubble chart now stratify each panel with by, as the chart of a single panel does.

Chart(form="bubble"): A faceted chart no longer fails when a category is absent from some panel.

Chart(): The data are now recognized as a summary table when no combination of x with the by variables repeats.

Chart(): A vector of y variables now halts for every form except form="dot", which draws the values as a matched pair, rather than failing downstream.

Chart(): Missing values of a single categorical variable are now counted, rather than always reported as 0, by every form.

Chart(form="dot"): The console suggestions are now displayed for this form.

Chart(form="dot"): A y vector paired with a repeated x, as in Chart(Dept, y=c(Pre,Post), form="dot"), now halts with a request for a stat rather than failing inside R.

Chart(), X(), XY(): The console acknowledgment of the Plotly package now appears after the statistical summary.

Chart(form="profile"): pdf_file is now available for this form.

X(): A value of form is now matched exactly, so form="vb" no longer draws "vbs". Write form="strip" for a strip plot, as form="s" no longer draws one.

X(): The console suggestions now name the parameter form rather than type.

X(): The message that redirects a categorical variable to Chart() now gives the call as Chart(Dept).

X(form="vbs"): The data-derived point size and outlier point size are now listed with the other reported parameter values.

X(form="vbs"): The reported data-derived point size is now named pt_size rather than size, so it can be copied into a call.

X(cumulate="on"): The frequency table no longer double-cumulates, which had raised the cumulative proportion above 1.

X(form="freq_poly", cumulate=): No longer halts with missing value where TRUE/FALSE needed.

X(): Parameter stat now halts for a form other than form="histogram" and form="freq_poly", rather than being ignored.

X(form="histogram"), X(form="density"), X(form="freq_poly"): A vector for x with facet now draws every variable, not just the first.

X(form="histogram"), X(form="density"), X(form="freq_poly"): A vector for x with by now displays in a Markdown document, as a tag list.

X(form="histogram"): The statistics of a faceted display now name the facet variable in their heading.

X(form="histogram"), X(form="density"), X(form="freq_poly"): A by variable with facet now overlays one distribution per group in each panel, rather than being dropped.

X(form="density"), X(form="freq_poly"): The panels of a faceted display now share one set of bins.

X(): A by variable now halts for form="violin", form="box", and form="vb", naming a form with a strip layer, or facet, as alternatives.

X(form="freq_poly"): A vector for x now draws one display per variable rather than halting.

X(form="histogram"), X(form="density"), X(form="freq_poly"): A by variable now displays in a Markdown document with p <- X(Salary, by=Gender); p.

XY(): A stat with a continuous x and no n_bins, as in XY(Years, Salary, stat="mean"), no longer fails.

XY() fit line: The confidence band now uses the residual degrees of freedom of the fit, n - 2 for a linear fit, rather than n - 1, and a faceted panel with too few points draws no band rather than producing NaN.

XY(): A vector of x or y variables with a categorical variable in the other role now halts, naming the Chart() dot plot instead.

XY() scatterplot matrix: A form other than "scatter" is now honored, or reported if the cells cannot render it.

XY(form="sunflower"): A vector for x or y now halts with the reason, pointing to form="scatter".

XY(ts_unit=): A complete final time period is no longer dropped from a series dated at the start of each period.

XY() exponential smoothing forecast: ts_trend="N" and ts_seasons="N" now exclude the trend or the seasonality from the model. Left out of the model, ETS selected the component itself, so ts_seasons="N" could still fit seasonality, as ETS(A,N,A) for a monthly series, and weekly data drew a warning about seasonal periods longer than 24.

XY() time series: A faceted series with a by variable no longer fails, and each panel draws every series.

XY(): A by variable with a vector of y variables is now refused rather than dropped, pointing to facet.

XY(form="smooth"), XY(form="contour"), XY(form="hexbin"): The message that refuses a by variable now gives the reason and names facet.

XY(form="sunflower"): One by variable and a vector of them are now refused for the same reason.

XY(): A categorical x or y now halts with the corrected call to X() or Chart(), with or without facet.

Regression(), reg_brief(): The contrasts parameter now codes a categorical predictor, rather than being ignored in favor of dummy coding.

Regression(): The abbreviations pred_rows and res_rows of n_pred_rows and n_res_rows no longer also pass to lm(), which had warned that the extra argument would be disregarded.

Regression() with Rmd: The R Markdown document for a model with one predictor now knits, where it had stopped at the correlation of the response with the predictor.

Model(): The output of Regression() and ANOVA() is now displayed, not just the banner that announces the analysis.

Interactive Plotly displays, style(sub_theme="black"): The axes and tick labels are now light on the black background for every theme, and axis_text_color now applies to the Plotly tick labels.

Deprecated function names such as Histogram() and BarChart(): A parameter that no longer exists is now reported as an unused argument, as X() and Chart() report it, as in unused argument (facet1 = Gender), rather than as object 'Gender' not found.

Subtitle: The color of the text given to sub is now set with sub_color in style().

pivot(): compute=tabulate is now refused, with the message to specify table.

pivot(): table combined with another compute function is now refused in long form, pointing to table_long=FALSE.

pivot(): range and summary now give a named column for each value, such as Salary_min and Salary_max, and return every value without a by variable.

pivot(): quantile, range, or summary with by_cols is now refused, pointing to the long form.

lessR version 4.5.6, Aug 2, 2026

Updates

Chart(), X() and XY(): Parameter type renamed to form, which names the perceptual form of the visualization within the analytic view, such as form="bars" for Chart(). The old name type is still accepted, now with a message that announces the new name form.

Chart(), X() and XY(): The variable arguments x, y, by, and facet now accept expressions, such as Chart(cut(rnorm(50), 3)), X(log(Salary)), or XY(Years, Salary, by=cut(Pre, 2)). An expression evaluates first against the columns of the data frame, then against the user’s workspace, with the expression text as the variable label. A vector of variable names such as c(Years, Salary) retains its column-selection meaning.

Chart(): Parameter facet now works for treemap, icicle charts, and bubble charts.

XY(): A multi-column data frame passed directly as x and y generates a scatterplot matrix, so the variable list can be stored once and reused: vec <- d[, c("Years","Pre","Post")] then XY(vec, vec, data=NULL).

XY(): Parameter ‘facet’ now works for all forms of relationship visualizations beyond only scatterplots.

XY(): With a vector of x (or y) variables, facet repeats the multi-series overlay across its panels, each panel the full overlay for one level of the facet variable, all panels on a common scale: XY(c(Pre, Post), Salary, facet=Gender). Parameter by does not apply with a vector of x or y variables, as the multiple series already occupy the color (series) dimension of the plot.

Regression() and Logit(): A term of the model formula may now be an expression of variables, such as reg(log(Salary) ~ Years + I(Years^2)), evaluated against the data frame with the expression text as the term label, so no need to first create the transformed variable with Transform().

ttest() and ANOVA(): Model terms may also be expressions, such as ttest(log(Salary) ~ Gender), ttest(log(Pre), log(Post)), or ANOVA(Salary ~ cut(Years, 3)), with the expression text as the label. An ANOVA() expression for a factor must produce categories, such as with cut() or factor(). Previously, ttest() with an expression response in a formula silently analyzed the untransformed variable.

Correlation(): The variables may also be expressions, such as Correlation(log(Years), Salary), with the expression text as the label. An expression that yields a data frame, such as Correlation(d[, 1:4]), specifies a correlation matrix.

Model(): Expanded to call more possibilities for analysis of a model.

Bug Fixes

Chart(): When displaying counts with labels="input", the inner ring counts now displayed correctly.

Chart(): The Plotly 100% stacked bar chart is now computed correctly.

Regression(): With one numeric and one categorical predictor, the Type II ANOVA table mislabeled the factor’s adjusted sum of squares with the covariate’s name, and listed the remaining rows per indicator variable with unadjusted (sequential) sums of squares. The table now correctly reports one Type II row per term: the covariate and the factor, each adjusted for the other.

lessR version 4.5.5, Jun 21, 2026

Updates

Chart(), X() and XY(): New parameter font_size with a default value of 1, consistently scales main_size, lab_size, and axis_size and legend text wear appropriate so that all consistently adapt for larger or smaller plot sizes.

Chart(): Parameter rotate_x parameter extended to the Plotly visualizations, which appear in the RStudio Viewer window.

Chart(): Consistent with the other charts, type set to dot now varies the hue of the dots, though fill can be used to set to a single color, as with the other charts.

Chart(): For type="dot", a numerical y supplied as raw data now requires a stat, consistent with the other chart types and with the documented behavior of y; the chart no longer defaults silently to the mean. Unaffected are counts when y is omitted, and a pre-aggregated summary table in which each level of x already pairs with a single value of y that is plotted directly without a stat.

style(): Parameters main_cex, lab_cex, and axis_cex renamed to main_size, lab_size, and axis_size, with an appropriate warning message if the old names are used.

style(): Specify the title size on the interactive plotly charts with the parameter main_style, with a default value of 1.

showPalettes(): Updated. The old hcl option changed to sequential but now just with sequential palettes. Now, the hues palette is its own option, showing the qualitative scale of different hues across many combinations of chroma and luminance.

tsExtract(): Existing function made external, user-available because XY() will no longer perform this task automatically, as it now requires a y variable.

ttest() and X(): New parameter full_curve that by default is TRUE for the Plotly (Viewer window) and Base R (Plots window) density curves. If set to FALSE then the density curves are truncated at the range of the data.

ttest() and X(): The resulting Plotly density curves have been enhanced.

X(): For type="freq_poly", theby=parameter is now operative, along with new parameterarea_fillwith default value of“off”forby=`.

X(): New parameter contour_legend with default value of FALSE to suppress the legend of a contour plot.

X() and XY(): Can now call fill=getColors(...) to customize the fill colors and not explicitly specify n= for the number of generated colors.

XY(): Default value of , the number of contour curves, increases from 10 to 20.

XY(): In the declaration of the function, its signature, y is now required. The only reason why it was not before is that a time series class ts could be submitted as x, and then the x (time) and y variables extracted. Now, the user does their own extraction with the new external function tsExtract().

XY(): For the scatterplot and a by= stratification, the default is now to vary both color and shape for the default hues palette to optimize for perceived color issues.

Bug Fixes

Chart(): Local parameter theme now working again.

Chart(), X(), XY(), and style(): Setting a local theme no longer alters the persistent quiet, brief, suggest, or notes options; these change only when explicitly specified. Previously a local theme could inadvertently set quiet to TRUE, suppressing later output.

Chart(): Chart labels now respond to setting lab_cex and axis_cex with the style() function.

getColors(): Now properly balances l (luminosity) and c (chroma) when one is set as a range given by a vector of two values, beginning and ending value.

interact(): Save button now works for the three input interactive visualizations.

style(): "lightbronze" style now works.

XY(): y-axis title (label) now plotted more consistently.

XY(): Parameter main now works to set the title.

Many more miscellaneous bug fixes and much internal refactoring, including making axis labels and the plot title consistent across the visualization functions.

lessR version 4.5.4, April 26, 2026

Updates

Chart(): For type="dot", parameter facet now implemented.

XY(): The new argument for type is "hexbin" for a hexbin plot from the package of the same name.

Bug Fixes

Chart(): Numerous issues, such as: + bar chart scaling now works properly for aggregation over a y variable + icicle chart title is now centered over the chart + bar chart title now displayed as the argument for main + bar chart labels now correctly display on the plotly bar chart bars (though a refresh of the viewer window may be needed).

Regression(): No regular output to the console bug fixed.

X(): Setting type to freq_poly now only produces a frequency polygon in the Plots window, not also the histogram. The interactive Plotly version still renders in the Viewer window.

lessR version 4.5.3, March 26, 2026

Updates

Chart(), X(), XY(): If accessing variables in the global environment instead of the data frame, now specify data=NULL.

Chart(): For hierarchical charts - sunburst, treemap, and icicle - when rendered with a sequential scale, with any theme other than the default such as with style("gray") or setting fill="grays", the dominance of each plotted slice or rectangle is scaled according to the value of the corresponding numerical entry.

Chart(): For type="dot", data no longer need be pre-aggregated.

XY(): Time series forecasting added to the plotly interactive visualization that appears in the RStudio Viewer window.

XY(): Old parameter name size changed to the more descriptive pt_size, also to be consistent with Chart().

Bug Fixes

Major bug evaluation was done across the lessR functions.

lessR version 4.5.2, March 4, 2026

Updates

Chart(): If there is a stat transformation of the y variable, then the label on each bar defaults to "input", that is, as it exists in the data without further transformation.

Logit(): Added parameters pt_size and transparency to customize plotted points for the combined sigmoid/scatterplot, and xlab and ylab for the axes labels.

XY(): When forecasting from ts_ahead parameter, dependent packages are no longer attached, no longer cluttering the output with distracting messages.

XY(): When forecasting from ts_ahead parameter, more robust inference of the time unit by which the data are organized, particularly with missing data.

Bug Fixes

Chart(): Numerous low-level errors corrected.

Chart(): If quiet is set to TRUE, suggestions are no longer displayed, and the frequency table is also not displayed.

Chart(): Fixed rendering issues for Plotly interactive visualizations when knitting from R Markdown and Quarto. Multiple interactive charts now render correctly in sequence. (Do need to p <- Chart(…), followed by p to print.)

Chart(): Weighted mean now correctly computed in place of the unweighted mean when calculating deviations to plot instead of the original data.

X(): Fixed rendering issues for the histogram when knitting from R Markdown and Quarto.

XY(): Forecasting legend no longer sometimes is placed too high vertically, sometimes even outside the plotting region.

XY(): If forecasting from a time series, the only plot is to the RStudio Plots window as the forecast does not apply yet to the interactive plot in the Viewer window.

XY(): When a by variable is present for forecasting, date misalignment could occur. Now fixed.

lessR version 4.5.1, January 22, 2026

Updates

Bug Fixes

Chart(), X(), and XY(): If quiet is TRUE, the citation to Plotly is not displayed.

Chart(): For data aggregated by the function, the hover title does not list the statistic type twice, and the hover value is reported to two more decimal digits than the data to account for the computation of the mean, etc.

style(): Works more consistently.

X(): For type="vbs", point size now responds to parameterpt_size`.

X(): For type="freq_poly", parameter stat now works.

XY(): Parameter ts_area_fill is now working.

XY(): When there is missing data for a time series, now properly plotted as missing, that is, blank space, with the corresponding dates showing.

XY(): For an interactive plotly time series: + size=0 for the point size now works. + Hover now has an x-value variable name and shows the corresponding numeric value as a number instead a formatted as a date. + digits_d now works

XY(): For a time series plot, misleading suggestions removed.

XY(): For a time series plot from an R time series object, the \(y\)-axis label is now correct.

XY(): For the interactive time series plot, the size variable for the size of points beyond the default of zero now active.

XY(): For the paired dot plot (not yet moved to Chart() where it belongs under the recent reorganization), the unique character values such as row names are now properly aligned with the plotted points, and sorted properly.

Future

XY(): Allow for a bubble chart when \(x\) and \(y\) are both categorical.

XY(): Allow for forecasts in the interactive plotly display (RStudio Viewer), not only to the static (RStudio Plots) display.

Chart(), X(), and XY(): For the plotly charts, allow for specifying the font sizes of different displays.

Logit(): Add parameters xlab and ylab. Add parameter size for the plotted points.

lessR version 4.5, December 10, 2025

Major Updates

Updates

Bug Fixes

style(): When applying a color theme, default point transparency, 0.1, is now correctly retained.

PieChart(): Parameter label_colors now works.

Plot(): For type="contour", fit line now works.

Plot(): For facet (lattice) scatterplots, fit line now works.

Regression(): ANCOVA Rsq_Press was not being computed. Now it is.

lessR version 4.4.5, August 21, 2025

Major Update

Updates

Bug Fixes

lessR version 4.4.4, June 16, 2025

Updates

Bug Fixes

lessR version 4.4.3, May 8, 2025

Major Update

Updates

Bug Fixes

lessR version 4.4.2, March 16, 2025

Updates

Bug Fixes

lessR version 4.4.1, February 3, 2025

Updates

Bug Fixes

Histogram(): Axis labels were written too far from the corresponding tick marks.

Plot(): A one-variable categorical variable coded as a factor can now be plotted as a bubble plot. If the categorical variable is numerical, add a value of the radius parameter to force as a bubble plot instead of a VBS plot.

style(): Transparency now properly recognized with add_fill colors with specified transparency from add_trans parameter.

style(): Default fill for a superimposed rectangle on a visualization with style(add="rect") changed to light gray with light transparency to allow content within the rectangle to be viewed, "#D9D9D920".

lessR version 4.4.0, January 12, 2025

Major Update

Updates

Bug Fixes

lessR version 4.3.9, December 8, 2024

Updates

Bug Fixes

lessR version 4.3.8, October 7, 2024

Major Updates

Updates

Bug Fixes

lessR version 4.3.7, August 21, 2024

Updates

Bug Fixes

lessR version 4.3.6, June 22, 2024

Updates

Bug Fixes

lessR version 4.3.3, May 9, 2024

Updates

Bug Fixes

lessR version 4.3.2, Apr 07, 2024

Updates

Bug Fixes

lessR version 4.3.1, Mar 26, 2024

Updates

Bug Fixes

lessR version 4.3.0, Nov 11, 2023

Updates

Bug Fixes

lessR version 4.2.9, May 14, 2023

Updates

Bug Fixes

lessR version 4.2.8, March 21, 2023

Updates

Plot(): Variable and axis value labels increased in size for R Markdown and R by itself analyses.

lessR version 4.2.6, Feb 13, 2023

Updates

Bug Fixes

lessR version 4.2.5, Jan 5, 2023

Primary Update

Updates

Bug Fixes

lessR version 4.2.4, Dec 07, 2022

Updates

Bug Fixes

lessR version 4.2.3, Sept 11, 2022

Primary Update

Updates

Bug Fixes

lessR version 4.2.2, July 13, 2022

Updates

Bug Fixes

lessR version 4.2.0, June 3, 2022

Updates

Bug Fixes

lessR version 4.1.9, May 4, 2022

Updates

Bug Fixes

lessR version 4.1.8, April 27, 2022

Updates

Bug Fixes

lessR version 4.1.7, March 30, 2022

Updates

Bug Fixes

lessR version 4.1.6, February 18, 2022

Updates

Bug Fixes

lessR version 4.1.5, January 29, 2022

Updates

Bug Fixes

lessR version 4.1.4, December 14, 2021

Updates

Bug Fixes

lessR version 4.0.8, November 18, 2021

Updates

Bug Fixes

lessR version 4.0.6, October 24, 2021

Updates

Bug Fixes

lessR version 4.0.5, October 4, 2021

Updates

Bug Fixes

lessR version 4.0.3, September 9, 2021

Updates

Bug Fixes

lessR version 4.0.2, August 5, 2021

Updates

Bug Fixes

lessR version 4.0.1, June 6, 2021

Updates

Bug Fixes

`