Hay una manera rápida de agregar una tabla a mi ggplot2 gráfica? Me gustaría que esta tabla tiene el valor de cada línea en los mismos puntos de corte como se especifica en scale_x_continuous(), pero con el porcentaje (%) símbolo junto a ellos. Mi objetivo final es crear algo como la imagen de abajo. Sin embargo, no sé cómo agregar la tabla.

¿Cómo puedo agregar una tabla a mi ggplot2 de salida?

El siguiente bloque de código sólo tiene dos líneas en ggplot2 y deben ser adecuados para darme un ejemplo:

require(ggplot2)
df <- data.frame(a = seq(0, 90, 10), b = seq(10, 100, 10))
df.plot <- ggplot(data = df, aes(x = seq(1, 100, 10))) + geom_line(aes(y = a), colour = 'red') +
           geom_line(aes(y = b), colour = 'blue') + scale_x_continuous(breaks = seq(0,100,10))
df.plot

Una pregunta similar se le preguntó aquí, pero la respuesta es más de una solución y no se vería bien para una tabla con 2 filas. Voy a tener un lío con las pistas proporcionadas por Brian Diggs, pero pensé que iba a publicar esto en caso de que alguien ya ha hecho algo como esto. Cualquier ayuda sería muy apreciada!

Edición: Gracias a @baptiste por ayudarme a entender esto. He publicado mi propia respuesta a continuación de que termine lo que empezó.

No tengo tiempo para realmente trabajar en esto, pero un enfoque podría ser la utilización de grid.arrange y grid.table de la gridExtra el paquete. Sospecho que va a ser duro para alinear las cosas muy bien de esa manera, aunque, sin un manual de bricolaje.
Yo creo que lo más sencillo es crear la tabla con ggplot2 sí mismo. Este fue ilustrada con ejemplo (pueden necesitar la actualización de algunos de que el código es relativamente antiguo).

OriginalEl autor zap2008 | 2013-05-21

2 Comentarios

  1. 9

    Aquí tenemos un ejemplo de la estrategia utilizada por learnr:

    require(ggplot2)
    df <- data.frame(a = seq(0, 90, 10), b = seq(10, 100, 10))
    df.plot <- ggplot(data = df, aes(x = seq(1, 100, 10))) + 
      geom_line(aes(y = a), colour = 'red') +
      geom_line(aes(y = b), colour = 'blue') +
      scale_x_continuous(breaks = seq(0,100,10))
    
    # make dummy labels for the table content
    df$lab <- month.abb[ceiling((df$a+1)/10)]
    
    df.table <- ggplot(df, aes(x = a, y = 0,
                                  label = lab, colour = b)) +
      geom_text(size = 3.5) + 
      theme_minimal() + 
      scale_y_continuous(breaks=NULL)+
      theme(panel.grid.major = element_blank(), legend.position = "none",
           panel.border = element_blank(), axis.text.x =  element_blank(),
           axis.ticks =  element_blank(),
            axis.title.x=element_blank(),
            axis.title.y=element_blank()) 
    
    gA <- ggplotGrob(df.plot)
    gB <- ggplotGrob(df.table)[6,]
    gB$heights <- unit(1,"line")
    
    
    require(gridExtra)
    gAB <- rbind(gA, gB)
    grid.newpage()
    grid.draw(gAB)

    ¿Cómo puedo agregar una tabla a mi ggplot2 de salida?

    Esto parece la solución correcta. Voy a trabajar a través de este y ver si puedo construir las ganancias de la parcela que les mostré en mi imagen.
    hay dos pasos en este procedimiento, el cual puede realizarse de forma independiente para hacer más fácil; i) en primer lugar, obtener la “tabla” de la parcela por su cuenta, incluso, con los ejes, etc si que ayuda; ii) alinee los dos gráficos en una página.
    ¿Qué hace exactamente el ggplotGrob() la función de hacer? la documentación es un poco cutre y realmente no sé lo que estoy mirando en la salida.
    es la construcción de la ggplot y convertirlo en un gtable, que es el objeto que, finalmente, obtener trazados. Como tal, contiene el diseño de la información (viewport anchos, alturas, etc.) que usted necesita para alinear dos parcelas. Trate de names(gt) para tener una idea de lo que el gtable contiene.
    tengo la trama buena pinta, gracias por su ayuda!

    OriginalEl autor baptiste

  2. 6

    Aquí es un script que crea la tabla general que me puse a hacer. Observe que incluye los títulos de las tablas por el cambio de los nombres bajo scale_y_continuous para cada fila.

    require(ggplot2)
    require(gridExtra)
    df <- data.frame(a = seq(0, 90, 10), b = seq(10, 100, 10))
    df.plot <- ggplot(data = df, aes(x = seq(1, 100, 10))) + 
    geom_line(aes(y = a), colour = 'red') +
    geom_line(aes(y = b), colour = 'blue') +
    scale_x_continuous(breaks = seq(0,100,10))
    # make dummy labels for the table content
    lab.df <- data.frame(lab1 = letters[11:20],
    lab2 = letters[1:10])
    df.table1 <- ggplot(lab.df, aes(x = lab1, y = 0,
    label = lab1)) +
    geom_text(size = 5, colour = "red") + 
    theme_minimal() + 
    scale_y_continuous(breaks=NULL, name = "Model Lift") +
    theme(panel.grid.major = element_blank(), legend.position = "none",
    panel.border = element_blank(), axis.text.x =  element_blank(),
    axis.ticks =  element_blank(),
    axis.title.x=element_blank(),
    axis.title.y=element_text(angle = 0, hjust = 5))
    df.table2 <- ggplot(lab.df, aes(x = lab2, y = 0,
    label = lab2)) +
    geom_text(size = 5, colour = "blue") + 
    theme_minimal() + 
    scale_y_continuous(breaks=NULL, name = "Random")+
    theme(panel.grid.major = element_blank(), legend.position = "none",
    panel.border = element_blank(), axis.text.x =  element_blank(),
    axis.ticks =  element_blank(),
    axis.title.x=element_blank(),
    axis.title.y=element_text(angle = 0, hjust = 3.84))
    # silly business to align the two plot panels    
    gA <- ggplotGrob(df.plot)
    gB <- ggplotGrob(df.table1)
    gC <- ggplotGrob(df.table2)
    maxWidth = grid::unit.pmax(gA$widths[2:3], gB$widths[2:3], gC$widths[2:3])
    gA$widths[2:3] <- as.list(maxWidth)
    gB$widths[2:3] <- as.list(maxWidth)
    gC$widths[2:3] <- as.list(maxWidth)
    grid.arrange(gA, gB, gC, ncol=1, heights=c(10, .3, .3))

    ¿Cómo puedo agregar una tabla a mi ggplot2 de salida?

    muy bien hecho. Hay un poco de una falta de coincidencia en el lado izquierdo, si eso es un problema estoy seguro de que puede ser fijado por mirar más de cerca la trama de los márgenes y anchos.
    también podría tener algo que ver con la posición de los títulos “Modelo de Elevación” y “el Azar.” Apuesto a que si te equivocaste en todo con la hjust opción un poco iría lejos. La otra parcela hice no tenía esos problemas.

    OriginalEl autor zap2008

Dejar respuesta

Please enter your comment!
Please enter your name here