marginal distribution in R, R rug plot, ggplot2 rug plot, rug plot in R only vertically, rug plot in R only horizontally

Add marginal distribution in R with rug plot from ggplot2

The R rug plot using the ggplot2 package is an interesting way to add one-dimension marginal distribution in R to the plot. There are multiple ways how to use that, and here are a couple of examples in combination with a scatter plot.

 

Marginal distribution in R with rug plot

Here is my scatterplot without any marginal distribution plots, and it is based on the iris dataset.

require(ggplot2)


ggplot(iris, aes(x = Petal.Length, y = Petal.Width, color = Species)) +
  geom_point(size = 3, alpha = 0.7, shape = 16) +
  scale_color_brewer(palette = "Dark2") +
  theme_minimal()

ggplot2 catter plot, scatter plot with iris dataset in R

By using geom_rug from ggplot2, you can add one-dimensional marginal distribution horizontally and vertically, but it is adjustable. Here is a basic one.

ggplot(iris, aes(x = Petal.Length, y = Petal.Width, color = Species)) +
  geom_point(size = 3, alpha = 0.7, shape = 16) +
  geom_rug(size = 1, alpha = 0.3, show.legend = FALSE) +
  scale_color_brewer(palette = "Dark2") +
  theme_minimal()

geom_rug ggplot2, R rug plot

In my case, rug plot colors are inherited. Colors are defined by different categories, but you can also specify them inside the rug plot. For example, if there is not necessary to look at data points by categories or you don’t have them, it looks like this.

set.seed(12345)

x <- c(rnorm(1000, mean = -1), rnorm(1000, mean = 1))

y <- c(rnorm(1000, mean = -1), rnorm(1000, mean = 1))

xy <- data.frame(x, y)


ggplot(data = xy, aes(x = x, y = y)) +
  geom_point(color = "#6667AB",
             size = 3,
             alpha = 0.3) +
  geom_rug(color = "sienna2", alpha = 0.2) +
  theme_minimal()

rug plot in R, ggplot2 rug plot

When you have more data points than in the iris data set, this kind of view of the marginal distribution seems more useful.

Change the position of the ggplot2 rug plot to show only vertically or horizontally

You can control the position of the ggplot2 rug plot by using the sides argument. Here is how it looks in all possible positions.

ggplot(iris, aes(x = Petal.Length, y = Petal.Width, color = Species)) +
  geom_point(size = 3, alpha = 0.7, shape = 16) +
  geom_rug(size = 1, alpha = 0.3, show.legend = FALSE, sides = "trbl") +
  scale_color_brewer(palette = "Dark2") +
  theme_minimal()

ggplot2 rug plot in all positions

If you want to show the R rug plot only vertically, you can specify that like this.

ggplot(iris, aes(x = Petal.Length, y = Petal.Width, color = Species)) +
  geom_point(size = 3, alpha = 0.7, shape = 16) +
  geom_rug(size = 1, alpha = 0.3, show.legend = FALSE, sides = "l") +
  scale_color_brewer(palette = "Dark2") +
  theme_minimal()

ggplot2 rug plot only vertically

Here is how it looks if the ggplot2 rug plot is only above the horizontal axis.

ggplot(iris, aes(x = Petal.Length, y = Petal.Width, color = Species)) +
  geom_point(size = 3, alpha = 0.7, shape = 16) +
  geom_rug(size = 1, alpha = 0.3, show.legend = FALSE, sides = "b") +
  scale_color_brewer(palette = "Dark2") +
  theme_minimal()

ggplot2 geom rug only horizontally, R scatter plot with marginal distribution

 

Thank you for reading this post! Please take a look at other posts from this blog about data visualization or other stuff. For example, how to save R plots or other results temporarily or convert to WebP format.