Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/zzawadz/customlayout

Simple extension of basic layout function from R.
https://github.com/zzawadz/customlayout

complicated-layouts graphics grid-layout plot r

Last synced: about 2 months ago
JSON representation

Simple extension of basic layout function from R.

Awesome Lists containing this project

README

        

---
output: github_document
---

customLayout
========================================================

```{r, echo = FALSE}
knitr::opts_chunk$set(
collapse = TRUE,
comment = "#>",
fig.path = "man/figures/README-"
)
```

[![GitHub stars](https://img.shields.io/github/stars/zzawadz/customLayout.svg?style=social&label=Stars)](https://github.com/zzawadz/customLayout/stargazers)
[![GitHub watchers](https://img.shields.io/github/watchers/zzawadz/customLayout.svg?style=social&label=Watch)](https://github.com/zzawadz/customLayout)

[![CRAN_Status_Badge](https://www.r-pkg.org/badges/version/customLayout)](https://cran.r-project.org/package=customLayout)
[![Downloads](https://cranlogs.r-pkg.org/badges/customLayout)](https://CRAN.R-project.org/package=customLayout)
[![](https://cranlogs.r-pkg.org/badges/grand-total/customLayout)](https://CRAN.R-project.org/package=customLayout)
[![Travis-CI Build Status](https://travis-ci.org/zzawadz/customLayout.svg?branch=master)](https://travis-ci.org/zzawadz/customLayout)
[![AppVeyor Build Status](https://ci.appveyor.com/api/projects/status/github/zzawadz/customLayout?branch=master&svg=true)](https://ci.appveyor.com/project/zzawadz/customLayout)
[![Coverage Status](https://img.shields.io/codecov/c/github/zzawadz/customLayout/master.svg)](https://codecov.io/github/zzawadz/customLayout?branch=master)
[![Project Status: Active - The project has reached a stable, usable state and is being actively developed.](https://www.repostatus.org/badges/latest/active.svg)](https://www.repostatus.org/#active)

`customLayout` is a simple extension of the basic `layout` function from `R` but it works not only with `base` and `grid` graphics systems, but also with PowerPoint slides using `officer` package.

## Instalation:

`customLayout` is available on CRAN:

```{r, eval=FALSE}
install.packages("customLayout")
```

The development version can be installed from GitHub using `devtools`:

```{r, eval=FALSE}
library(devtools)
install_github("zzawadz/customLayout")
```

## Basic functionality:

You can create layouts in the using the same syntax as in the base `layout` function:

```{r base, message = FALSE, results = 'hide', fig.width = 4, fig.height = 2, fig.keep = 'all', fig.pos = 'H'}
library(customLayout)
lay <- lay_new(
matrix(1:4, nc = 2),
widths = c(3, 2),
heights = c(2, 1))
lay_show(lay)

lay2 <- lay_new(
matrix(1:4, nc = 2),
widths = c(3, 5),
heights = c(2, 4))
lay_show(lay2)
```

But the main strength of this package is in combining created layouts with specific ratio:

```{r combine, message = FALSE, results = 'hide', fig.width = 4, fig.height = 2, tidy = FALSE}
# lay will be 3 times wider that lay2
# all ascects in lay and lay2 will be preserved
cl = lay_bind_col(lay, lay2, widths = c(3, 1))
lay_show(cl)
```

You can create even more complicated layouts:

```{r complicated, message = FALSE, results = 'hide', fig.width = 4, fig.height = 2}
lay3 <- lay_new(matrix(1:2))
lay4 <- lay_bind_row(cl, lay3, heights = c(5, 2))
lay_show(lay4)

lay5 <- lay_bind_col(lay4, lay3, widths = c(5, 2))
lay_show(lay5)
```

## Split layout

You can create very complicated layouts by splitting one field:

```{r split, message = FALSE, results = 'hide', fig.width = 4, fig.height = 2, tidy = FALSE, fig.keep='all'}
library(customLayout)
lay <- lay_new(
matrix(1:4, nc = 2),
widths = c(3, 2),
heights = c(2, 1))
lay_show(lay)
lay2 <- lay_new(
matrix(1:4, nc = 2),
widths = c(3, 5),
heights = c(2, 4))
lay_show(lay2)

# Split field 4 from lay into lay2:
slay <- lay_split_field(lay, lay2, field = 4)
lay_show(slay)
```

## Example session:

### Base graphics

```{r example,message = FALSE, results = 'hide', fig.width = 10, fig.height = 6}
library(customLayout)
par(mar = c(3, 2, 2, 1))
lay <- lay_new(
matrix(1:4, nc = 2),
widths = c(3, 2),
heights = c(2, 1))
lay2 <- lay_new(matrix(1:3))
cl <- lay_bind_col(lay, lay2, widths = c(3, 1))

lay_set(cl) # initialize drawing area

set.seed(123)
plot(1:100 + rnorm(100))
plot(rnorm(100), type = "l")
hist(rnorm(500))
acf(rnorm(100))
pie(c(3, 4, 6), col = 2:4)
pie(c(3, 2, 7), col = 2:4 + 3)
pie(c(5, 4, 2), col = 2:4 + 6)
```

## Grid graphics (ggplot2 and friends)

```{r examplegrid,message = FALSE, fig.width = 10, fig.height = 6}
library(customLayout)
library(ggplot2)
library(gridExtra)

lay <- lay_new(
matrix(1:2, ncol = 1))
lay2 <- lay_new(matrix(1:3))
cl <- lay_bind_col(lay, lay2, widths = c(3, 1))

library(ggplot2)
cuts <- sort(unique(diamonds[["cut"]]),
decreasing = TRUE)

make_cut_plot <- function(cut) {
dd <- diamonds[diamonds[["cut"]] == cut, ]
pl <- ggplot(dd) +
geom_point(aes(carat, price)) +
facet_wrap("cut")
pl
}

plots <- lapply(cuts, make_cut_plot)

lay_grid(plots, cl)
```

## PowerPoint support

Layouts created using `customLayout` package can be used to arrange elements on the PowerPoint slide. For the detailed description please refer to [the vignette](https://www.customlayout.zstat.pl/articles/layouts-for-officer-power-point-document.html):

```{r, eval=FALSE}
vignette("layouts-for-officer-power-point-document", package = "customLayout")
```

![](man/figures/officer-text.png)