2011-04-21 27 views
5

Es posible en ggplot2 para dibujar que segunda etiqueta "eje" correlacionar el porcentaje de valores de X e Y.ggplot2 - Eje Estética

enter image description here

Editar:

I tienen una data.frame con dos vars, tanto relacionados como en porcentaje. Quiero mostrar la evolución de V1 relacionada con V2; por ejemplo, cuánto porcentaje de V2 necesito para obtener el 20% de V1 (y viceversa).

V1 V2 
0 0 
0.03 0.0005 
0.10 0.0015 
0.13 0.0020 
.... 
1 1 

Ahora mi problema es cómo puedo hacer que el eje interior en X e Y, que muestra la relación entre X y los porcentajes y. También, ¿cómo puedo configurar ggplot para usar (0,0) como la intersección de los ejes xey?

+0

puede usar 'geom_rect' y' geom_text' para agregar manualmente estos valores. Sería genial si pudiera proporcionar detalles adicionales sobre los valores calculados, ya que no está claro qué está mostrando en el "eje" interior. – daroczig

+0

@daroczig: edité la publicación con más información – Barata

Respuesta

8

Puede construir este gráfico de capa a capa (con geom_rect y geom_text) fácilmente con ggplot2. No es una solución brillante, pero se podía obtener la imagen por:

generar algunos datos que se utilizarán en el terreno:

df <- data.frame(A=sort(runif(20)), B=sort(runif(20))) 
df <- rbind(df, c(1,1)) 

Generar una versión modificada de la tabla de datos de arriba para ser trazado como "interno" eje ( nota: Sólo computo dos partes en la mediana):

df_rect <- data.frame(xmin=c(0, median(df$A), -0.01, -0.01), xmax=c(median(df$A), 1, 0, 0), ymin=c(-0.01, -0.01, 0, median(df$B)), ymax=c(0, 0, median(df$B), 1), color=grey(c(0.7, 0.2)), alpha=c(0.8, 0.4, 0.8, 0.4)) 

Generar algo por el estilo para el texto de trazado:

df_text <- data.frame(x=c(median(df$A)/2, median(df$A) + (1-median(df$A))/2, 0.05, 0.05), y=c(0.02, 0.02, median(df$B)/2, median(df$B) + (1-median(df$B))/2), label=rep('50%', 4)) 

y en todos los últimos terrenos:

ggplot(df, aes(A, B)) + geom_point() + 
    geom_line() + 
    geom_rect(data=df_rect, aes(xmin=xmin,xmax=xmax,ymin=ymin,ymax=ymax, fill=color, alpha=alpha), inherit.aes = FALSE) + scale_fill_grey() + 
    geom_text(data=df_text, aes(x=x, y=y, label=label), inherit.aes = FALSE) + 
    theme_bw() + scale_y_continuous(limits=c(-0.01, 1), formatter='percent') + scale_x_continuous(limits=c(-0.01, 1), formatter='percent') + opts(legend.position="none") 

Dónde geom_point puntos los valores dados y geom_line conecta todos (como vi su imagen de ejemplo). geom_rect con todos los parámetros dibuja el "eje interno" gris y geom_text hace la parte de texto. Tendrá que jugar con los marcos de datos generados (de entrada) (en el ejemplo anterior: df_rext y df_text) para obtener sus datos deseados. theme_bw significa tema blanco y negro y la opción dos scale_continous significa establecer los límites entre 0 y 1 y también establecer el porcentaje formatter.

que se traduce en: sample plot

espero que usted será capaz de personalizar y actualizar este pequeño ejemplo para sus necesidades!

Cuestiones relacionadas