plotly.R icon indicating copy to clipboard operation
plotly.R copied to clipboard

subplot() fails to plot 6 plots in a 2 rows x 4 columns grid

Open louievdl opened this issue 1 year ago • 2 comments

I want to use subplot function to plot 6 ggplots in a 2 rows x 4 columns grid.

Here is a reproducible example:

figlist <- list()
for (i in 1:6) figlist[[i]] <- ggplot(data.frame(a = 1:3,b = 4:6), aes(a,b)) + geom_point()
subplot(figlist, nrows = 2, widths = rep(0.25,4))

This generates "Error: The length of the widths argument must be equal to the number of columns"

Looking into the code of subplots.R, the subplot function accepts arguments nrows, widths and heights, which appear to be passed through to get_domains.

The problem is that get_domains calculates ncols ignoring length(widths) and then generates an error when these don't match.

I would have expected get_domains to calculate ncols only if widths was not supplied.

I hope this helps.

louievdl avatar Nov 01 '24 12:11 louievdl

I do not think I would want plotly to work the way you envision.

A "principle of least surprise" approach would be to allow the user to set both nrows and ncols (ncols being calculated by default directly in the header of the function), and be able to generate "blank spaces" when there are not enough plots to fill all the slots.

Then if you say ncols=4 and provide 4 widths, it should work.

romanzenka avatar Nov 08 '24 17:11 romanzenka

Yes, as you say, probably better to add an ncols option for subplot - if the user didn't provide widths, subplot could just assume equal widths.

louievdl avatar Nov 20 '24 12:11 louievdl