superbPlot() comes with seven built-in layouts for plotting your data. However, it is possible to add additional, custom-made layouts. In this vignette, we present rapidly the existing layouts, then show how to supplement superb with your own layouts.

## The built-in plot layouts

When calling superbPlot(), you use the plotStyle = "layout" option to indicate which layout you wish to use. Internally, superbPlot() is calling a function whose name is superbPlot."layout"(). For example, with plotStyle = "line", the plot is actually performed by the function superbPlot.line().

The seven layout available in superbPlot package are :

• superbPlot.line() : shows the results as points and lines,

• superbPlot.point(): shows the results as points only,

• superbPlot.bar() : shows the results using bars,

• superbPlot.pointjitter(): shows the results with points, and the raw data with jittered points,

• superbPlot.pointjitterviolin(): also shows violin plot behind the jitter points, and

• superbPlot.pointindividualline(): show the results with fat points, and individual results with thin lines,

• superbPlot.raincloud(): Shows the results with distribution and jitter.

To determine if a certain function is superbPlot-compatible, use the following function:

superb:::is.superbPlot.function("superbPlot.line")
## [1] TRUE

where you put between quote the name of a function. When devising your own, custom-made function, it is a good thing to check that it is superbPlot-compatible.

## Illustrating the built-in layouts

To get a sense of the currently available layouts, we first generate a dataset composed of randomly generated scores mimicking a 3 $$\times$$ 2 design with three degrees of Difficulties (as a between-group factor) and two days of testing (as a within-subject factor). It is believed (and simulated) that all two factors have main effets on the scores.

testdata <- GRD(
RenameDV   = "score",
SubjectsPerGroup = 25,
BSFactors  = "Difficulty(3)",
WSFactors  = "Day(day1, day2)",
Population = list(mean = 65,stddev = 12,rho = 0.5),
Effects    = list("Day" = slope(-5), "Difficulty" = slope(3) )
)
head(testdata)
##   id Difficulty score.day1 score.day2
## 1  1          1   67.79400   40.97700
## 2  2          1   73.99569   70.53799
## 3  3          1   65.26509   60.98999
## 4  4          1   93.48946   57.18516
## 5  5          1   52.60959   59.30682
## 6  6          1   60.09739   45.63643

For simplicity, we define a function whose arguments are the dataset and the layout:

mp <- function(data, style, ...) {
superbPlot(data,
WSFactors = "Day(2)",
BSFactors = "Difficulty",
variables = c("score.day1", "score.day2"),
plotStyle = style,
...
)+labs(title = paste("Layout is ''",style,"''",sep=""))
}

Lets compute the plots will the first six built-in layouts and show them

p1 <- mp(testdata, "bar")
p2 <- mp(testdata, "point")
p3 <- mp(testdata, "line")
p4 <- mp(testdata, "pointjitter" )
p5 <- mp(testdata, "pointjitterviolin")
p6 <- mp(testdata, "pointindividualline")

library(gridExtra)
grid.arrange(p1,p2,p3,p4,p5,p6,ncol=2)

The last format, a raincloud plot (Allen et al., 2021), is better seen with coordinates flipped over:

mp(testdata, "raincloud") + coord_flip()

For more controls, you can manually set the colors, the fills and/or the shapes, as done here in a list:

ornate = list(
scale_colour_manual( name = "Difference",
labels = c("Easy", "Hard", "Unthinkable"),
values = c("blue", "black", "purple")) ,
scale_fill_manual( name = "Difference",
labels = c("Easy", "Hard", "Unthinkable"),
values = c("blue", "black", "purple")) ,
scale_shape_manual( name = "Difference",
labels = c("Easy", "Hard", "Unthinkable") ,
values = c(0, 10, 13)) ,
theme_bw(base_size = 9) ,
labs(x = "Days of test", y = "Score in points" ),
scale_x_discrete(labels=c("1" = "Former day", "2" = "Latter day"))
)
library(gridExtra)
grid.arrange(
p1+ornate, p2+ornate, p3+ornate,
p4+ornate, p5+ornate, p6+ornate,
ncol=2)

As of the raincloud with the same ornaments, we get

mp(testdata, "raincloud") + coord_flip() + ornate