2012-04-17 32 views
5

Construyendo en mi previous question Me gustaría agregar la etiqueta del segundo eje en el lado opuesto de la trama.¿Cómo puedo agregar etiquetas de segundo eje en ggplot2?

La trama de datos se parece a:

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)) 

Usando Tyler's solution, un gráfico de que parece que en la actualidad

enter image description here

De una manera similar a un diagrama de bosque I' Me gustaría agregar un segundo conjunto de etiquetas (variable label en mi marco de datos) que representan valores graficados, preferiblemente en el lado derecho de los paneles. De modo que toda trama imita bosque similar a este ejemplo:

enter image description here

Sé que seems to be frowned upon segundo eje. Sin embargo, estos son solo otro conjunto de etiquetas ... y parece ser una costumbre entre las parcelas forestales.

¿Cómo puedo hacer eso en ggplot?

+1

las respuestas aquí se puede que le dará un punto de partida: http://stackoverflow.com/questions/4867597/can-you-easily- plot-rugs-axes-on-the-top-right-in-ggplot2/4868130 # 4868130 – Chase

+0

@Chase: gracias por eso. De hecho, es mucho más fácil de hackear usando 'plot'. Todavía me pregunto si uno podría hacer eso en ggplot2? – radek

+1

El segundo eje solo está mal visto cuando se trata de una variable totalmente diferente (por ejemplo, la temperatura y la concentración de sedimentos). Un segundo eje que es una versión transformada del primero es perfectamente aceptable (por ejemplo, temperatura en C, o en K, o en F). –

Respuesta

4

EDITAR actualización a 0.9.3 ggplot2

Agregando su conjunto de etiquetas en su trama de datos de prueba con el cuadro facetas es sencillo. Use geom_text con estética para las etiquetas y las posiciones xey de las etiquetas. En el siguiente código, xlim crea un poco más de espacio para las etiquetas. El siguiente código:

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)) 

produce:

enter image description here

+0

Fantástico. Muchas gracias por ayuda! – radek

Cuestiones relacionadas