Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I add second axis labels in ggplot2?

Tags:

r

ggplot2

Building on my previous question I'd like to add second axis label on the opposite side of the plot.

The data frame looks like:

test <- structure(list(characteristic = structure(c(1L, 2L, 3L, 1L, 2L
), .Label = c("Factor1", "Factor2", "Factor3"), class = "factor"), 
    es = c(1.2, 1.4, 1.6, 1.3, 1.5), ci_low = c(1.1, 1.3, 1.5, 
    1.2, 1.4), ci_upp = c(1.3, 1.5, 1.7, 1.4, 1.6), label = structure(c(1L, 
    3L, 5L, 2L, 4L), .Label = c("1.2 (1.1, 1.3)", "1.3 (1.2, 1.4)", 
    "1.4 (1.3, 1.5)", "1.5 (1.4, 1.6)", "1.6 (1.5, 1.7)"), class = "factor"), 
    set = structure(c(1L, 1L, 1L, 2L, 2L), .Label = c("H", "S"
    ), class = "factor")), .Names = c("characteristic", "es", 
"ci_low", "ci_upp", "label", "set"), class = "data.frame", row.names = c(NA, 
-5L))

Using Tyler's solution, a graph of it looks like that at the moment:

enter image description here

In a similar way to a forest plot I'd like to add a second set of labels (label variable in my data frame) representing graphed values, preferably on the right side of panels. So that it all mimics forest plot similar to this example:

enter image description here

I know that second axis seems to be frowned upon. However these are just another set of labels.. ant it seems to be a custom among forest plots.

How can I do that in ggplot?

like image 883
radek Avatar asked Apr 17 '12 01:04

radek


People also ask

How do I add axis labels in R?

To set labels for X and Y axes in R plot, call plot() function and along with the data to be plot, pass required string values for the X and Y axes labels to the “xlab” and “ylab” parameters respectively. By default X-axis label is set to “x”, and Y-axis label is set to “y”.

How do you avoid overlapping axis labels in ggplot2?

To avoid overlapping labels in ggplot2, we use guide_axis() within scale_x_discrete().

Which arguments can be used to add labels in Ggplot?

Method 1: Using geom_text() This method is used to add Text labels to data points in ggplot2 plots.


1 Answers

EDIT updating to ggplot2 0.9.3

Adding your set of labels in your test dataframe to the faceted chart is straightforward. Use geom_text with aesthetics for the labels, and the x and y positions of the labels. In the code below, xlim creates a little more space for the labels. The following code:

library(gridExtra)
library(ggplot2)

p <- ggplot(test, aes(y = characteristic, x = es, xmin = ci_low, xmax = ci_upp)) + 
  geom_point() +   
  geom_errorbarh(height = 0) +
  geom_text(aes(label = label, x = 2, y = characteristic)) + 
  scale_x_continuous(limits = c(1, 2.2), breaks = c(1, 1.2, 1.4, 1.6, 1.8),
    labels=c("1.0", "1.2", "1.4", "1.6", "1.8")) +
  facet_grid(set ~ ., scales = "free", space = "free") +
  theme_bw() + 
  theme(strip.text.y = element_text(angle = 0),
    panel.grid.major = element_blank(),
    panel.grid.minor = element_blank())
p

grid.text(expression(paste("ES " %+-% " ci")), x = 0.78,   y = .92,
   gp = gpar(fontsize = 18))

produces:

enter image description here

like image 63
Sandy Muspratt Avatar answered Dec 15 '22 03:12

Sandy Muspratt