Tracciare più colonne sullo stesso grafico in R

Ho il seguente frame di dati:

ABCD 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 

Ho bisogno di tracciare tutte queste colonne nello stesso grafico (sull’asse x voglio la variabile Xax e l’asse y le variabili A, B, C e D) e anche disegnare la linea di regressione per ogni variabile da sola.

Ho provato questo:

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

Ma sta solo tracciando il primo (Xax e A)

Il modo più semplice è convertire i tuoi dati in un formato “alto”.

 s < - "ABCG 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) 

Una soluzione molto semplice:

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

si prega di notare che traccia solo i dati e non traccia alcuna linea di regressione.

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

DATI

 df< - read.table(text =c(" ABCG 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) 

Per selezionare le colonne da tracciare, ho aggiunto 2 righe alla risposta di Vincent 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 "ordinare i dati" per saperne di più sul formato alto (o lungo) / largo.