RaukR 2024 • Advanced R for Bioinformatics
Roy Francis
21-Jun-2024
---
title: "This is a title"
format:
revealjs
---
quarto::quarto_render()
in R:quarto render
in the terminal:Slides are separated by ##
. Incremental content on is separated by . . .
like below.
Hide or not count a slide:
## Slide Title {visibility="hidden"}
## Slide Title {visibility="uncounted"}
. . .
Any content inside class .notes
on a slide are notes. This is only visible in presenter mode (by pressing s).
. . .
The slide content can be organized into columns which can be nested if needed.
:::{.columns}
:::{.column width="50%"}
<div style="background-color:#fdebd0">Left content</div>
:::
:::{.column width="50%"}
<div style="background-color:#eaf2f8">Right content</div>
:::{.column width="60%"}
<div style="background-color:#d0ece7">Inner left</div>
:::
:::{.column width="40%"}
<div style="background-color:#f2d7d5">Inner right</div>
:::
:::
:::
Left content
Right content
Inner left
Inner right
Rendering of normal text, numbers and symbols.
ABCDEFGHIJKLMNOPQRSTUYWXYZÅÄÖ
abcdefghijklmnopqrstuvwxyzåäö
0123456789
!“#%&/()$@*^~<>-:;,_±|?+=
!"#%&/\()$@*^~<>-:;,_±|?+=
Headings can be defined as shown below.
## Level 2 heading
### Level 3 heading
#### Level 4 heading
##### Level 5 heading
###### Level 6 heading
Level 1 usage is not recommended. Use level 2 for slide titles. Use level 3 and below for other titles.
Text scaling classes
[Largest text]{.largest}
[Larger text]{.larger}
[Large text]{.large}
Normal text.
[Small text]{.small}
[Smaller text]{.smaller}
[Smallest text]{.smallest}
Largest text
Larger text
Large text
Normal text
Small text
Smaller text
Smallest text
Horizontal alignment of text can be adjusted as shown below.
[Left aligned text]{.left}
[Center aligned text]{.center}
[Right aligned text]{.right}
Left aligned text
Center aligned text
Right aligned text
::: {.blockquote}
This line is quoted
:::
This line is quoted
A horizontal line can be created using ---
This is **Bold text**
This is Bold text
This is *Italic text*
This is Italic text
~~Strikethrough~~ text
Strikethrough text
This is subscript H~2~O
H2O
This is superscript 2^10
210
This is a [badge]{.badge .badge-primary}
This is a badge
This is a [badge]{.badge .badge-secondary}
This is a badge
This is a [link](r-project.org)
This is a link
Fit text to full width.
::: {.r-fit-text}
Attention
:::
Attention
In reports, .aside
pushes content into the margin while in revealjs, it is pushed to the bottom.
::: {.aside}
Content inside aside.
:::
Unordered List
- Bullet 1
- Bullet 2
- Sub-bullet 2.1
Incremental List
:::{.incremental}
1. Incremental Bullet 1
2. Incremental Bullet 2
3. Incremental Bullet 3
:::
For more options, see here.
::: {style="color: red"}
This paragraph is red.
:::
This paragraph is red.
[This text is blue]{style="color: blue"}
This text is blue
::: {.callout-note}
This is a callout.
:::
::: {.callout-warning}
This is a callout.
:::
::: {.callout-important}
This is a callout.
:::
::: {.callout-tip}
This is a callout.
:::
::: {.callout-caution}
This is a callout.
:::
Note
This is a callout.
Warning
This is a callout.
Important
This is a callout.
Tip
This is a callout.
Caution
This is a callout.
Variants of callout
::: {.callout-note icon=false}
Icon is disabled
:::
::: {.callout-note appearance="simple"}
Appearance is simple
:::
::: {.callout-note appearance="minimal"}
Appearance is minimal
:::
::: {.callout-note appearance="simple"}
## Custom title
Simple appearance and a custom title
:::
::: {.callout-note appearance="minimal"}
## Custom title
Minimal appearance and a custom title
:::
Note
Icon is disabled
Appearance is simple
Appearance is minimal
Custom title
Simple appearance and a custom title
Custom title
Minimal appearance and a custom title
::: {.callout-note}
This contains code
## Callout with code
```
Sys.Date()
```
:::
Callout with code
This contains code
Sys.Date()
Inline code
`this`
looks like this
.`r Sys.Date()`
producing 2024-05-29.== != && ++ |> <> <- <= <~ /= |=> ->>
Code chunks
Code can also be defined inside chunks.
```
This is code
```
This is code
R code is executed inside code blocks like this
which shows the code and output.
Sizing pre-formatted inline code
[`Sys.Date()`]{.largest}
[`Sys.Date()`]{.larger}
[`Sys.Date()`]{.large}
`Sys.Date()`
[`Sys.Date()`]{.small}
[`Sys.Date()`]{.smaller}
[`Sys.Date()`]{.smallest}
Sys.Date()
Sys.Date()
Sys.Date()
Sys.Date()
Sys.Date()
Sys.Date()
Sys.Date()
Sizing pre-formatted code block
::: {.small}
```
Sys.Date()
```
:::
Sys.Date()
Sys.Date()
Sys.Date()
Sizing source code
Sizing output code
For more code highlighting documentation, see here.
Using Markdown
Using regular markdown.
![](assets/image.jpg)
The dimensions are based on image and/or fill up the entire width.
Control image dimensions.
![](assets/image.jpg){width=50%}
![](assets/image.jpg){width=20%}
For more image documentation, see here.
Figure layout
::: {layout-ncol=3}
![Caption for figure 1](assets/image.jpg){#fig-layout-1}
![Caption for figure 2](assets/image.jpg){#fig-layout-2}
![Caption for figure 3](assets/image.jpg){#fig-layout-3}
:::
Absolute positioning
![](assets/image.jpg){.absolute top=250 left=0 height="450"}
![](assets/image.jpg){.absolute top=200 right=50 height="250"}
![](assets/image.jpg){.absolute bottom=0 right=200 height="200"}
Using Raw HTML
This image is 30% size. <img src="assets/image.jpg" style="width:30%;"/>
Using R
R chunks in RMarkdown can be used to control image display size using the argument out.width
.
This image is displayed at a size of 200 pixels.
Some examples of rendering equations.
$e^{i\pi} + 1 = 0$
$$\frac{E \times X^2 \prod I}{2+7} = 432$$
$$\sum_{i=1}^n X_i$$
$$\int_0^{2\pi} \sin x~dx$$
\(e^{i\pi} + 1 = 0\) \[\frac{E \times X^2 \prod I}{2+7} = 432\] \[\sum_{i=1}^n X_i\] \[\int_0^{2\pi} \sin x~dx\]
Some examples of rendering equations.
$\left( \sum_{i=1}^{n}{i} \right)^2 = \left( \frac{n(n-1)}{2}\right)^2 = \frac{n^2(n-1)^2}{4}$
$\begin{eqnarray} X & \sim & \mathrm{N}(0,1)\\ Y & \sim & \chi^2_{n-p}\\ R & \equiv & X/Y \sim t_{n-p} \end{eqnarray}$
$\begin{eqnarray} P(|X-\mu| > k) & = & P(|X-\mu|^2 > k^2)\\ & \leq & \frac{\mathbb{E}\left[|X-\mu|^2\right]}{k^2}\\ & \leq & \frac{\mathrm{Var}[X]}{k^2} \end{eqnarray}$
\(\left( \sum_{i=1}^{n}{i} \right)^2 = \left( \frac{n(n-1)}{2}\right)^2 = \frac{n^2(n-1)^2}{4}\)
\(\begin{eqnarray} X & \sim & \mathrm{N}(0,1)\\ Y & \sim & \chi^2_{n-p}\\ R & \equiv & X/Y \sim t_{n-p} \end{eqnarray}\)
\(\begin{eqnarray} P(|X-\mu| > k) & = & P(|X-\mu|^2 > k^2)\\ & \leq & \frac{\mathbb{E}\left[|X-\mu|^2\right]}{k^2}\\ & \leq & \frac{\mathrm{Var}[X]}{k^2} \end{eqnarray}\)
kable
The most simple table using kable
from R package knitr
.
kableExtra
More advanced table using kableExtra
and formattable
.
iris[c(1:2,51:52,105:106),] %>%
mutate(Sepal.Length=color_bar("lightsteelblue")(Sepal.Length)) %>%
mutate(Sepal.Width=color_tile("white","orange")(Sepal.Width)) %>%
mutate(Species=cell_spec(Species,"html",color="white",bold=T,
background=c("#8dd3c7","#fb8072","#bebada")[factor(.$Species)])) %>%
kable("html",escape=F) %>%
kable_styling(bootstrap_options=c("striped","hover","responsive"),full_width=F) %>%
column_spec(5,width="3cm")
Sepal.Length | Sepal.Width | Petal.Length | Petal.Width | Species | |
---|---|---|---|---|---|
1 | 5.1 | 3.5 | 1.4 | 0.2 | setosa |
2 | 4.9 | 3.0 | 1.4 | 0.2 | setosa |
51 | 7.0 | 3.2 | 4.7 | 1.4 | versicolor |
52 | 6.4 | 3.2 | 4.5 | 1.5 | versicolor |
105 | 6.5 | 3.0 | 5.8 | 2.2 | virginica |
106 | 7.6 | 3.0 | 6.6 | 2.1 | virginica |
Tables using the gt package. Grammar of tables with extensive customization options.
Sepal Length | Sepal Width | Petal Length | Petal Width |
---|---|---|---|
setosa | |||
5.1 | 3.5 | 1.4 | 0.2 |
4.9 | 3.0 | 1.4 | 0.2 |
versicolor | |||
7.0 | 3.2 | 4.7 | 1.4 |
6.4 | 3.2 | 4.5 | 1.5 |
virginica | |||
6.3 | 3.3 | 6.0 | 2.5 |
5.8 | 2.7 | 5.1 | 1.9 |
Source: Iris data. Anderson, 1936; Fisher, 1936) |
DT
Interactive table using R package DT
.
reactable
Interactive tables with reactable.
Plots using base R.
ggplot2
Plotting using ggplot2
.
highcharter
R package highcharter
is a wrapper around javascript library highcharts
.
library(highcharter)
h <- iris %>%
hchart("scatter",hcaes(x="Sepal.Length",y="Sepal.Width",group="Species")) %>%
hc_xAxis(title=list(text="Sepal Length"),crosshair=TRUE) %>%
hc_yAxis(title=list(text="Sepal Width"),crosshair=TRUE) %>%
hc_chart(zoomType="xy",inverted=FALSE) %>%
hc_legend(verticalAlign="top",align="right") %>% hc_size(height=300,width=500)
htmltools::tagList(list(h))
plotly
R package plotly
provides R binding around javascript plotting library plotly
.
ggplotly
plotly
also has a function called ggplotly
which converts a static ggplot2 object into an interactive plot.
ggiraph
R package ggiraph
converts a static ggplot2 object into an interactive plot.
library(ggiraph)
p <- ggplot(iris,aes(x=Sepal.Length,y=Petal.Length,colour=Species))+
geom_point_interactive(aes(tooltip=paste0("<b>Petal Length:</b> ",Petal.Length,"\n<b>Sepal Length: </b>",Sepal.Length,"\n<b>Species: </b>",Species)),size=2)+
theme_bw()
tooltip_css <- "background-color:#f8f9f9;padding:10px;border-style:solid;border-width:2px;border-color:#125687;border-radius:5px;"
ggiraph(code=print(p),hover_css="cursor:pointer;stroke:black;fill-opacity:0.3",zoom_max=5,tooltip_extra_css=tooltip_css,tooltip_opacity=0.9,height_svg=2,width_svg=4,width=0.6)
dygraphs
R package dygraphs
provides R bindings for javascript library dygraphs for time series data.
R package networkD3
allows the use of interactive network graphs from the D3.js javascript library.
leaflet
R package leaflet
provides R bindings for javascript mapping library; leafletjs.
crosstalk
R package crosstalk
allows crosstalk enabled plotting libraries to be linked. Through the shared ‘key’ variable, data points can be manipulated simultaneously on two independent plots.
library(crosstalk)
shared_quakes <- SharedData$new(quakes[sample(nrow(quakes), 100),])
lf <- leaflet(shared_quakes,height=300) %>%
addTiles(urlTemplate='http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png') %>%
addMarkers()
py <- plot_ly(shared_quakes,x=~depth,y=~mag,size=~stations,height=300) %>%
add_markers()
div(div(lf,style="float:left;width:49%"),div(py,style="float:right;width:49%"))
ObservableJS in quarto documentation.
This slide has a colourful background
## Colourful {background-color="#ABEBC6"}
This slide has a background image
## Big Image {background-image="assets/image.jpg"}
## {background-image="assets/images/cover.jpg"}
css: "styles.css"
.scrollable
sysname
"Linux"
release
"5.15.0-107-generic"
version
"#117~20.04.1-Ubuntu SMP Tue Apr 30 10:35:57 UTC 2024"
nodename
"38843d560d9e"
machine
"x86_64"
login
"unknown"
user
"root"
effective_user
"root"
_
platform x86_64-pc-linux-gnu
os linux-gnu
major 4
minor 3.2
2024 • SciLifeLab • NBIS • RaukR