superponer - Trazar varias líneas en un gráfico
varias graficas en r (3)
Debe llevar sus datos en formato largo (es decir, fundido) para usarlos con ggplot2
:
library("reshape2")
mdf <- melt(mdf, id.vars="Company", value.name="value", variable.name="Year")
Y luego tienes que usar aes( ... , group = Company )
para agruparlos:
ggplot(data=mdf, aes(x=Year, y=value, group = Company, colour = Company)) +
geom_line() +
geom_point( size=4, shape=21, fill="white")
Intento usar ggplot para trazar varias líneas en un gráfico, pero no estoy seguro de cómo hacerlo con mi conjunto de datos. No estoy seguro de si necesito cambiar la estructura de datos o no (¿transponer?)
Los datos se ven así:
Company 2011 2013
Company1 300 350
Company2 320 430
Company3 310 420
También lo he intentado transponer:
Year Company1 Company2 Company3
2011 300 320 310
2013 350 430 420
Y para esto puedo trazar 1 de los valores usando;
ggplot(data=df, aes(x=Year, y=Company1)) + geom_line(colour="red") + geom_point(colour="red", size=4, shape=21, fill="white")
Pero no sé cómo combinar todas las compañías ya que ya no tengo un objeto ''Compañía'' para agrupar. ¿Alguna sugerencia?
En lugar de utilizar las estructuras de datos exageradamente complicadas requeridas por ggplot2, puede usar las funciones R nativas:
tab<-read.delim(text="
Company 2011 2013
Company1 300 350
Company2 320 430
Company3 310 420
",as.is=TRUE,sep=" ",row.names=1)
tab<-t(tab)
plot(tab[,1],type="b",ylim=c(min(tab),max(tab)),col="red",lty=1,ylab="Value",lwd=2,xlab="Year",xaxt="n")
lines(tab[,2],type="b",col="black",lty=2,lwd=2)
lines(tab[,3],type="b",col="blue",lty=3,lwd=2)
grid()
legend("topleft",legend=colnames(tab),lty=c(1,2,3),col=c("red","black","blue"),bg="white",lwd=2)
axis(1,at=c(1:nrow(tab)),labels=rownames(tab))
La respuesta de @Federico Giorgi fue una muy buena respuesta. Me ayudo Por lo tanto, hice lo siguiente, para producir varias líneas en la misma gráfica a partir de los datos de un solo conjunto de datos, usé un bucle for. La leyenda también se puede agregar.
plot(tab[,1],type="b",col="red",lty=1,lwd=2, ylim=c( min( tab, na.rm=T ),max( tab, na.rm=T ) ) )
for( i in 1:length( tab )) { [enter image description here][1]
lines(tab[,i],type="b",col=i,lty=1,lwd=2)
}
axis(1,at=c(1:nrow(tab)),labels=rownames(tab))