how to combine facet_grid and ggstatsplot::grouped_ggbetweenstats? - r

Is there any way we can combine ggstatsplot::grouped_ggbetweenstats and facet_grid to get multiple plots in one scale, something like below?
data<-data.frame(technology=(a,a,a,a, b,b,b,b,c,c,c,c,d,d,d,d), rate=c(2,5,7,9,2,5,7,9,2,5,7,9,2,5,7,9),return=c(20,15,20,30,50,13,10,8,7,9,11,23,17,20,13,16))

In short, no, it is not possible to combine ggplot2::facet_grid() with ggstatsplot::grouped_ggbetweenstats() (or any grouped_ functions actually) because the latter doesn't output a ggplot object.
ggstatsplot uses a wrapper around cowplot::plot_grid() function (called combine_plots()) in the backdrop to arrange the individual plots and any adjustment you want to make to how individual plots are arranged in the combined plot can be made in the grouped_ function itself using ... argument.
For example, see the documentation for grouped_ggbetweenstats() function here-
https://indrajeetpatil.github.io/ggstatsplot/reference/grouped_ggbetweenstats.html#arguments

Related

How to change the dimensions of the graphs output in the grid.arrange() function in R?

I would like to make the output graphs wider. How do I accomplish this with the grid.arrange() function?
I have 4 scatter plots but they are a bit scrunched when I run the function. I just simply want to increase their width so they aren't scrunched and the values on the x axis read cleanly.
Can I easily manipulate dimensions with the grid.arrange() function?
I tried width()...but that didn't work.

How to remove box and whiskers from plot() function in R?

I'm trying to do a very simple plot using the plot() function in R where I plot out the weights and diets of chicks in a stratified plot. For other simple plots like this I've been able to just use the plot() function and it's gone fine. But for some reason, R insists on plotting this as a box-and-whiskers chart instead of plotting all the values themselves. I've tried many different solutions I've found on the Web, from box=FALSE to box=0 to bty="n" to type="p" but nothing works. R always plots it as a box-and-whiskers chart. I can use whisklty=0 to get rid of the whiskers, but nothing I've tried (including all possible combinations of the above solutions) will replace the boxes with the actual values I want.
If the x-axis data is categorical, plot will return a boxplot by default. You could run plot.default() instead of plot() and that will give you a plot of points.
Compare, for example:
plot(iris$Species, iris$Petal.Width)
plot.default(iris$Species, iris$Petal.Width)
If you type methods(plot) in the console, you'll see all of the different kinds of plots the plot function returns, depending on what type of object you give it. plot.default is the "method" that gets dispatched when you provide plot with two columns of numbers. plot.factor gets dispatched when the y-values are numeric and the x-values are categorical (run ?plot.factor for details). If you do plot(table(mtcars$vs, mtcars$cyl)) the plot.table method gets dispatched. And so on.

Is there a way to use ggs_caterpillar to compare two models on the same facet, all parameters are shared?

I can produce a caterpillar plot using ggmcmc::ggs_caterpillar with two facets each one showing a model.
In this case all my parameters are shared between the models. I would like to plot them on the same facet. So I can visually compare each parameter next to each other with a small vertical offset.
Is this possible in the function or via another approach?
library(ggmcmc)
Model1 <- ggs(Model1MCMCOutput)
Model2 <- ggs(Model2MCMCOutput)
ggs_caterpillar(list(Model1, Model2))
This is not possible using this function. I looked in the internals and the plotting inside is done in a slightly convoluted way. I wrote my own function for plotting what I needed. Using geom_linerange and rotating the coordinate system rather than using geom_segment as in ggs_caterpillar.

R - Adding series to multiple plots

I have the following plot:
plot.ts(returns)
I have another dataframe ma_sd which contains the rolling SD from moving averages of the above returns. The df is structured exactly like returns. Is there a simple way to add each line to the corresponding plots?
lines(1:N, ma_sd) seemed intuitive, but it does not work.
Thanks
The only way I can see you doing this is to plot them separately. This code is a bit clunky but will allow you full flexibility to be able to specify labels and axis ranges. You can build on this.
par(mfrow=c(3,1),oma=c(5,4,4,2),mar=c(0,0,0,0))
time<-as.data.frame(matrix(c(1:length(returns[,1])),length(returns[,1]),3))
plot(time[,1],returns[,1],type='l',xaxt='n')
points(time[,1],ma_sd[,1],type='l',col='red')
plot(time[,2],returns[,2],type='l',xaxt='n')
points(time[,2],ma_sd[,2],type='l',col='red')
plot(time[,3],returns[,3],type='l')
points(time[,3],ma_sd[,3],type='l',col='red')

Can I use shingles from lattice in ggplot2 in R

It is possible to use the shingles to define specific ranges in ggplot2. As far as i understand shingles are a way to generate groups. Can we create such shingles and use them in ggplot2 facet_grid to obtain graphs?
Following up from the comments, ggplot can't draw shingles (in the way lattice draws shingles with special indicators in the strip) and by default doesn't have a means of producing the overlapping groups.
However, I cam across this excellent PDF document which aims to produce a gpplot2 version of every figure in Depayan's excellent Lattice book (Lattice: Multivariate Data Visualization with R).
Page 31 contains a custom function fn() which replicates the behaviour of equal.count(), as far as I can tell, to provide the correct data structure to plot with overlapping shingles. The PDF contains plenty of examples of "shingles" in ggplot that you can play with.
So not sure if this answers the Q - but at least it appears one can fudge ggplot into producing plots that use the shingle concept.

Resources