2012-10-09 47 views
7

¿Hay alguna forma de agregar una tabla a un gráfico? Supongamos que tengo el diagrama a continuación:¿Agregar una matriz a un diagrama?

curve(dnorm, -3, +4) 

Ahora me gustaría añadir una matriz por debajo de la trama:

testMat <- matrix(1:20, ncol = 5) 

Mi objetivo? Estoy escribiendo una función de trama que no solo crea una trama, sino que también muestra una matriz que incluye la información que me interesa debajo de la trama.

Por favor, vea la imagen adjunta para ver lo que quiero decir. Realmente aprecio tu ayuda.

enter image description here

+0

Si me pongo mi traje de Ed Tufte por un momento: un gráfico debe ser independiente por sí mismo como proveedor de información. Yo recomendaría mantener la tabla de valores de datos por separado (por ejemplo, un Apéndice). Si nada más, esto hace que sea mucho más fácil para otras personas extraer los números ("copiar y pegar") para su uso posterior. –

Respuesta

7

probablemente hay mejores maneras de hacer esto, pero una opción podría ser el uso de uno de los paquetes que "parcelas" matrices y tramas de datos, al igual que el "gplots" package.

Aquí hay un ejemplo muy simple (probablemente pueda personalizar esto para un control mucho más fino sobre el diseño final).

# Some sample data 
testMat <- matrix(1:20, ncol = 5) 
testMatDF <- as.data.frame(testMat) 
names(testMatDF) <- c("Hey there", "Column 2", 
         "Some * Symbols", "And^More", 
         "Final Column") 
rownames(testMatDF) <- paste("Group", 1:4) 

# Load the package 
library(gplots) 
# Set par for plotting a three-row plot 
par(mfrow = c(3, 1)) 
curve(dnorm, -3, +4) 
textplot(testMat) 
textplot(testMatDF) 

El resultado:

enter image description here

También se puede utilizar en lugar de layout()par(mfrow...) si se quiere conseguir un poco más creativo con la colocación de sus parcelas. Por ejemplo:

layout(matrix(c(1, 1, 2, 3, 3, 3), 
       2, 3, byrow = TRUE)) 
curve(dnorm, -3, +4) 
textplot(testMat) 
textplot(testMatDF) 

enter image description here

+0

hola @mrdwab, Tahnks por su respuesta. Tengo un pequeño problema con textplot(). Mi matriz tiene 5 columnas y solo muestra las dos primeras columnas. ¿Hay alguna forma de que pueda reducir el espacio entre columnas? – Sam

+0

@Sepehr, vea '? Textplot' y busque' cmar' y 'rmar' para ajustar el espaciado entre columnas y filas. No estoy seguro de por qué tendrías el problema que describes sin ver una muestra de tus datos. Además del espacio entre columnas, otra razón podría ser el tamaño de su área de trazado inicial; si la ventana del diagrama es demasiado pequeña, algunos de los datos podrían cortarse. ¡Espero que ayude! – A5C1D2H2I1M1N2O1R2T1

+0

Realmente aprecio tu ayuda. – Sam

7

paquete plotrix proporciona la función de addtable2plot.

Ejemplo del archivo de ayuda:

library(plotrix) 
testdf<-data.frame(Before=c(10,7,5),During=c(8,6,2),After=c(5,3,4)) 
rownames(testdf)<-c("Red","Green","Blue") 
barp(testdf,main="Test addtable2plot",ylab="Value", 
    names.arg=colnames(testdf),col=2:4) 
# show most of the options 
addtable2plot(2,8,testdf,bty="o",display.rownames=TRUE,hlines=TRUE, 
       title="The table") 

Editar: puso la mesa en una nueva parcela para colocarlo debajo de su trama.

library(plotrix) 

layout(matrix(c(1,2), 2, 1, byrow = TRUE), 
     widths=c(1,1), heights=c(2,1)) 


testdf<-data.frame(Before=c(10,7,5),During=c(8,6,2),After=c(5,3,4)) 
rownames(testdf)<-c("Red","Green","Blue") 
barp(testdf,main="Test addtable2plot",ylab="Value", 
    names.arg=colnames(testdf),col=2:4) 

plot.new() 
addtable2plot(0,0,testdf,bty="o",display.rownames=TRUE,hlines=TRUE, 
       title="The table") 
+0

Miré 'addtable2plot()' también, pero me pareció engorroso colocar la tabla donde yo quería. Parece dependiente del tamaño de la ventana de la trama. ¿Puede actualizar su respuesta con un ejemplo similar al que estaba buscando el OP (en otras palabras, cuando la tabla está debajo de la trama en lugar de dentro de la trama)? – A5C1D2H2I1M1N2O1R2T1

+0

@mrdwab Muestro una posibilidad de cómo lograr eso. – Roland

+0

impresionante. Mucho mejor respuesta ahora. +1 – A5C1D2H2I1M1N2O1R2T1

Cuestiones relacionadas