`ggplot2`

is my favorite R library to plot data

## Alluvial diagrams

Requires the `ggalluvial`

package, on top of `ggplot2`

(*via* Mathieu Perona).

Alluvial diagrams are like this (my own production):

You can also use `networkD3`

with the function `sankeyNetwork()`

(*via* Antoine Belgodere): more here. An interactive example can be found here (via Pauline R.).

## Animate graphs

## Bar plots

### Simple bar plot

Suppose you have those data in `df`

:

[ninja_tables id=”577″]

You want to plot how many `n`

are in each `year`

in a simple bar plot.

```
plot <- ggplot(df, aes(x = year, y = n)) +
geom_bar(stat = "identity")
plot
```

Do NOT forget to add `stat = "identity"`

in `geom_bar()`

. It tells `ggplot2`

to “count” `n`

.

### Percentage bar plot

```
plot <- ggplot(df, aes(x = var1, y = (..count..)/sum(..count..))) +
geom_bar()
plot
```

More sophisticated code, not tested yet:

```
ggplot(df, aes(x= var1, group=var_group)) +
geom_bar(aes(y = ..prop.., fill = factor(..x..)), stat="count") +
geom_text(aes( label = scales::percent(..prop..),
y= ..prop.. ), stat= "count", vjust = -.5) +
labs(y = "Percent", fill="var1") +
facet_grid(~var_group) +
scale_y_continuous(labels = scales::percent)
```

Requires the library `scales`

.

(Same source)

### Plot several series in one single bar plot

```
ggplot(df, aes(x=var1, y=(..count..), fill=var2)) +
geom_bar(stat="identity", position="dodge")
```

If the variable used with `fill`

is kind of categorical (for instance it’s years), beware to be sure it’s a *factor* (`as.factor(var2)`

). Otherwise it may be treated as a continuous variable, and displayed incorrectly.

`(..count..)`

means that `ggplot2`

will display the count of `var1`

for each value of `var2`

.

## Draw lines

How to draw straight lines in a `ggplot`

graph?

### Vertical line

Add `geom_vline(xintercept = 10)`

on the `ggplot2`

object to add a vertical line at x = 10.

### Horizontal line

Similarly, to draw a horizontal line on a `ggplot2`

object, use `geom_hline(yintercept = 10)`

. Change `yintercept`

to your desired y value.