2012-03-02 17 views
25

I tienen la siguiente trama de datos:Plot múltiples columnas en el mismo gráfico en R

A  B  C  D  Xax 
0.451 0.333 0.034 0.173 0.22   
0.491 0.270 0.033 0.207 0.34  
0.389 0.249 0.084 0.271 0.54  
0.425 0.819 0.077 0.281 0.34 
0.457 0.429 0.053 0.386 0.53  
0.436 0.524 0.049 0.249 0.12  
0.423 0.270 0.093 0.279 0.61  
0.463 0.315 0.019 0.204 0.23 

necesito para trazar todas estas columnas en la misma parcela (en el eje x Quiero la variable Xax y la eje y las variables A, B, C y D) y también dibujar la línea de regresión para cada variable sola.

yo probamos este:

pl<-ggplot(data=df) + geom_point(aes(x=Xax,y=A,size=10)) + 
    geom_point(aes(x=Xax,y=B,size=10)) + 
    geom_point(aes(x=Xax,y=C,size=10)) + 
    geom_point(aes(x=Xax,y=D,size=10)) + 
    geom_smooth(method = "lm", se=FALSE, color="black") 

Pero es sólo el trazado de la primera (Xax y A)

¿Cómo puedo hacer esto ??

Gracias.

Respuesta

38

Lo más fácil es convertir sus datos a un formato "alto".

s <- 
"A  B  C  G  Xax 
0.451 0.333 0.034 0.173 0.22   
0.491 0.270 0.033 0.207 0.34  
0.389 0.249 0.084 0.271 0.54  
0.425 0.819 0.077 0.281 0.34 
0.457 0.429 0.053 0.386 0.53  
0.436 0.524 0.049 0.249 0.12  
0.423 0.270 0.093 0.279 0.61  
0.463 0.315 0.019 0.204 0.23 
" 
d <- read.delim(textConnection(s), sep="") 

library(ggplot2) 
library(reshape2) 
d <- melt(d, id.vars="Xax") 

# Everything on the same plot 
ggplot(d, aes(Xax,value, col=variable)) + 
    geom_point() + 
    stat_smooth() 

# Separate plots 
ggplot(d, aes(Xax,value)) + 
    geom_point() + 
    stat_smooth() + 
    facet_wrap(~variable) 
+0

¿No encontré la solución? esta es una pequeña parte si el marco de datos, es mucho más grande. ¿Puedes explicar la respuesta y aplicarla en el marco de datos original? – ifreak

+0

y por cierto esto no funciona:/ – ifreak

+3

@ifreak ¿Cómo podría alguien aplicar este código al marco de datos completo original, que existe solo en su computadora, y que no ha proporcionado? Y decir que "no está funcionando" es el comentario menos útil que se pueda imaginar, ya que no proporciona ninguna información sobre cómo o por qué no funciona. – joran

10

Una solución muy sencilla:

df <- read.csv("df.csv",sep=",",head=T) 
x <- cbind(df$Xax,df$Xax,df$Xax,df$Xax) 
y <- cbind(df$A,df$B,df$C,df$D) 
matplot(x,y,type="p") 

tenga en cuenta que sólo representará los datos y no traza ninguna línea de regresión.

0

Usando tidyverse

df %>% tidyr::gather("id", "value", 1:4) %>% 
    ggplot(., aes(Xax, value))+ 
    geom_point()+ 
    geom_smooth(method = "lm", se=FALSE, color="black")+ 
    facet_wrap(~id) 

DATOS

df<- read.table(text =c(" 
A  B  C  G  Xax 
0.451 0.333 0.034 0.173 0.22   
0.491 0.270 0.033 0.207 0.34  
0.389 0.249 0.084 0.271 0.54  
0.425 0.819 0.077 0.281 0.34 
0.457 0.429 0.053 0.386 0.53  
0.436 0.524 0.049 0.249 0.12  
0.423 0.270 0.093 0.279 0.61  
0.463 0.315 0.019 0.204 0.23"), header = T) 
0

Para seleccionar las columnas para trazar, añadí 2 líneas a la respuesta de Vicente Zoonekynd:

#convert to tall/long format(from wide format) 
col_plot = c("A","B") 
dlong <- melt(d[,c("Xax", col_plot)], id.vars="Xax") 

#"value" and "variable" are default output column names of melt() 
ggplot(dlong, aes(Xax,value, col=variable)) + 
    geom_point() + 
    geom_smooth() 

Google "de datos ordenada" para saber más sobre el formato alto (o largo)/ancho.

Cuestiones relacionadas