ggstance v0.3.2


Monthly downloads



Horizontal 'ggplot2' Components

A 'ggplot2' extension that provides flipped components: horizontal versions of 'Stats' and 'Geoms', and vertical versions of 'Positions'.



ggstance implements horizontal versions of common ggplot2 Geoms, Stats, and Positions.


Get the development version from Github with:

# install.packages("devtools")

Horizontal geoms

While coord_flip() can only flip a plot as a whole, ggstance provides flipped versions of Geoms, Stats and Positions. This makes it easier to build horizontal layer or use vertical positioning (e.g. vertical dodging). Also, horizontal Geoms draw horizontal legend keys to keep the appearance of your plots consistent.

Horizontal Geoms:

  • geom_barh()
  • geom_colh()
  • geom_histogramh()
  • geom_linerangeh()
  • geom_pointrangeh()
  • geom_errorbarh()
  • geom_crossbarh()
  • geom_boxploth()
  • geom_violinh()

Horizontal Stats:

  • stat_binh()
  • stat_boxploth()
  • stat_counth()
  • stat_xdensity()
  • stat_summaryh()

Vertical Positions:

  • position_dodgev()
  • position_dodge2v()
  • position_nudgev()
  • position_fillv()
  • position_stackv()
  • position_jitterdodgev()



To create a horizontal layer in ggplot2 with coord_flip(), you have to supply aesthetics as if they were to be drawn vertically:


# Vertical
ggplot(mpg, aes(class, hwy, fill = factor(cyl))) +

# Horizontal with coord_flip()
ggplot(mpg, aes(class, hwy, fill = factor(cyl))) +
  geom_boxplot() +

In ggstance, you supply aesthetics in their natural order:


# Horizontal with ggstance
ggplot(mpg, aes(hwy, class, fill = factor(cyl))) +

Horizontal boxplot

Facetting with Free Scales

Some plots are hard to produce with coord_flip(). One case is facetting with free scales. Here is an example from @smouksassi:


df <- data.frame(
  Group = factor(rep(1:3, each = 4), labels = c("Drug A", "Drug B", "Control")),
  Subject = factor(rep(1:6, each = 2), labels = c("A", "B", "C", "D", "E", "F")),
  Result = rnorm(12)

vertical <- ggplot(df, aes(Subject, Result))+
  geom_boxplot(aes(fill = Group))+
  facet_grid(. ~ Group, scales = "free_x")

How do we flip this plot? With coord_flip(), the free scales are not flipped correctly:

vertical + coord_flip()
vertical + facet_grid(Group ~ ., scales = "free_x") + coord_flip()

On the other hand a ggstance horizontal layer will work properly:

horizontal <- ggplot(df, aes(Result, Subject))+
  geom_boxploth(aes(fill = Group))+
  facet_grid(Group ~ ., scales = "free_y")

Horizontal free-scales facetting

Using vertical positions

In this example we use vertical dodging to align measurements within subgroups.

data <- expand.grid(
  Group = c("A", "B"),
  Subgroup = c("a", "b", "c"),
  y = 1:10
data$y <- sample(1:4, replace = TRUE, size = nrow(data))

ggplot(data, aes(y, Group, colour = Subgroup)) +
  stat_sum(position = position_dodgev(height = 0.5))

Vertical positions

Functions in ggstance

Name Description
geom_violinh Horizontal violin plot.
stat_summaryh Horizontal summary.
stat_counth Horizontal counting.
stat_boxploth Horizontal boxplot computation.
stat_binh Horizontal binning.
stat_xdensity Density computation on x axis.
draw_key Horizontal key drawing functions
geom_crossbarh Horizontal intervals: lines, crossbars & errorbars.
GeomBarh Base ggproto classes for ggstance
mean_se_h Calculate mean and standard error
geom_barh Bars, rectangles with bases on y-axis
hmisc_h Horizontal versions of summary functions from Hmisc
position_dodgev Vertical Positions
geom_boxploth Horizontal box and whiskers plot.
geom_histogramh Horizontal histograms and frequency polygons.
No Results!

Last month downloads


License GPL-3
LazyData true
Encoding UTF-8
RoxygenNote 6.1.1
Collate 'flip-aes.R' 'geom-barh.R' 'legend-draw.R' 'geom-boxploth.R' 'geom-colh.R' 'geom-crossbarh.R' 'geom-errorbarh.R' 'geom-histogramh.R' 'geom-linerangeh.R' 'geom-pointrangeh.R' 'geom-violinh.R' 'ggstance.R' 'position-dodgev.R' 'position-dodge2v.R' 'position-jitterdodgev.R' 'position-stackv.R' 'position.R' 'stat-binh.R' 'stat-boxploth.R' 'stat-counth.R' 'stat-summaryh.R' 'stat-xdensity.R'
NeedsCompilation no
Packaged 2019-06-24 14:45:11 UTC; lionel
Repository CRAN
Date/Publication 2019-06-24 15:20:03 UTC

Include our badge in your README