How can I add second axis labels in ggplot2?

匿名 (未验证) 提交于 2019-12-03 03:10:03

问题:

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:

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:

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?

回答1:

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:



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!