Pregunta

Me gustaría parcela de y1 y y2 en la misma parcela.

x  <- seq(-2, 2, 0.05)
y1 <- pnorm(x)
y2 <- pnorm(x, 1, 1)
plot(x, y1, type = "l", col = "red")
plot(x, y2, type = "l", col = "green")

Pero cuando hago algo como esto, que no están representadas en la misma parcela juntos.

En Matlab que uno puede hacer hold on, pero ¿alguien sabe cómo hacer esto en R?

¿Fue útil?

Solución

lines() o points() agregarán al gráfico existente, pero no crearán una nueva ventana. Por lo que tenía que hacer

plot(x,y1,type="l",col="red")
lines(x,y2,col="green")

Otros consejos

También puede utilizar par y la trama en el mismo gráfico pero el eje diferente. Algo de la siguiente manera:

plot( x, y1, type="l", col="red" )
par(new=TRUE)
plot( x, y2, type="l", col="green" )

Si usted lee en detalle acerca de par en R, usted será capaz de generar gráficos muy interesantes. Otro libro que mirar es de Pablo Murrel R Gráficos.

Cuando la construcción de múltiples capas de las parcelas se debe considerar ggplot paquete.La idea es crear un objeto gráfico con básicos de la estética y mejorar de forma incremental.

ggplot el estilo requiere que los datos se llena en data.frame.

# Data generation
x  <- seq(-2, 2, 0.05)
y1 <- pnorm(x)
y2 <- pnorm(x,1,1)
df <- data.frame(x,y1,y2)

Solución básica:

require(ggplot2)

ggplot(df, aes(x)) +                    # basic graphical object
  geom_line(aes(y=y1), colour="red") +  # first layer
  geom_line(aes(y=y2), colour="green")  # second layer

Aquí + operator se utiliza para agregar capas adicionales de objeto básico.

Con ggplot usted tiene acceso a la gráfica de objetos en cada etapa de trazado.Decir, de costumbre paso a paso de instalación puede tener este aspecto:

g <- ggplot(df, aes(x))
g <- g + geom_line(aes(y=y1), colour="red")
g <- g + geom_line(aes(y=y2), colour="green")
g

g produce la parcela, y se puede ver en cada etapa (bueno, después de la creación de al menos una capa).Más beneficios de la trama también se hacen con objeto creado.Por ejemplo, podemos agregar etiquetas para los ejes de:

g <- g + ylab("Y") + xlab("X")
g

Final g se parece a:

enter image description here

ACTUALIZACIÓN (2013-11-08):

Como se señaló en los comentarios, ggplot's filosofía sugiere el uso de datos en el formato largo.Puede hacer referencia a esta respuesta https://stackoverflow.com/a/19039094/1796914 para ver el código correspondiente.

Creo que la respuesta que busca es:

plot(first thing to plot)
plot(second thing to plot,add=TRUE)

Utilice la función matplot:

matplot(x, cbind(y1,y2),type="l",col=c("red","green"),lty=c(1,1))

usar esto si y1 y y2 se evalúan en los mismos puntos x. Se amplía el eje Y para el montaje, el que sea más grande (o y1 y2), a diferencia de algunas de las otras respuestas aquí que recortará y2 si se pone más grande que y1 (soluciones ggplot su mayoría están de acuerdo con esto).

Alternativamente, y si las dos líneas no tienen la misma coordenadas x, establecer los límites de los ejes en la primera trama y añadir:

x1  <- seq(-2, 2, 0.05)
x2  <- seq(-3, 3, 0.05)
y1 <- pnorm(x1)
y2 <- pnorm(x2,1,1)

plot(x1,y1,ylim=range(c(y1,y2)),xlim=range(c(x1,x2)), type="l",col="red")
lines(x2,y2,col="green")

asombra esta Q es de 4 años y nadie ha mencionado matplot o x/ylim ...

tl; dr:. que desea utilizar curve (con add=TRUE) o lines


No estoy de acuerdo con par(new=TRUE) porque eso va a duplicar impresión tic-marcas y etiquetas de los ejes. Por ejemplo,

sine y parábola

La salida de plot(sin); par(new=T); plot( function(x) x**2 ).

Mira cómo en mal estado el eje vertical etiquetas son! Dado que los rangos son diferentes que tendría que ylim=c(lowest point between the two functions, highest point between the two functions) conjunto, que es menos fácil de lo que estoy a punto de mostrar --- y manera menos fácil si desea agregar no sólo dos curvas, pero muchos.


Lo que siempre me confunde sobre el trazado es la diferencia entre curve y lines. (Si no puede recordar que estos son los nombres de los dos comandos importantes de trazado, simplemente cantar ella.)

He aquí la gran diferencia entre curve y lines.

curve trazará una función, como curve(sin). parcelas lines puntos con valores x e y, como:. lines( x=0:10, y=sin(0:10) )

Y aquí hay una pequeña diferencia:. curve necesidades a ser llamados con add=TRUE por lo que estamos tratando de hacer, mientras que lines ya se asume que está añadiendo a un gráfico existente

id y sine

Este es el resultado de llamar plot(0:2); curve(sin).


Entre bastidores, echa un vistazo a methods(plot). Y comprobar body( plot.function )[[5]]. Cuando se llama a cifras R plot(sin) que sin es una función (los valores no Y) y utiliza el método plot.function, que termina llamando curve. Así curve es la herramienta destinada a las funciones de la manija.

como se describe por @redmode, es posible trazar las dos líneas en el mismo dispositivo gráfica usando ggplot. En esa respuesta los datos estaban en un formato 'amplia'. Sin embargo, cuando se utiliza ggplot por lo general es más conveniente para mantener los datos en una trama de datos en un formato de 'larga'. Entonces, mediante el uso de diferentes variables de agrupación '' en los argumentos aesthetics, propiedades de la línea, tales como tipo de línea o el color, variarán de acuerdo con la variable de agrupación, y aparecerán correspondientes leyendas.

En este caso, podemos utilizar los aessthetics colour, que coincide con el color de las líneas a diferentes niveles de una variable en el conjunto de datos (en este caso: y1 y2) vs. Pero primero necesitamos para fundir los datos de ancho de formato largo, por ejemplo, usando la función de 'fundir' del paquete reshape2. A continuación se describen otros métodos para formar de nuevo los datos: Remodelación hoja.de.datos de amplia al formato largo .

library(ggplot2)
library(reshape2)

# original data in a 'wide' format
x  <- seq(-2, 2, 0.05)
y1 <- pnorm(x)
y2 <- pnorm(x, 1, 1)
df <- data.frame(x, y1, y2)

# melt the data to a long format
df2 <- melt(data = df, id.vars = "x")

# plot, using the aesthetics argument 'colour'
ggplot(data = df2, aes(x = x, y = value, colour = variable)) + geom_line()

introducir descripción de la imagen aquí

Si está utilizando gráficos de base (es decir, no de celosía / gráfico reticulado), entonces se puede sostener de MATLAB imitan en función mediante el uso de los puntos / líneas / funciones polígonos para añadir detalles adicionales a sus parcelas sin necesidad de iniciar una nueva trama. En el caso de un diseño de G. múltiple, puede utilizar par(mfg=...) saber a cual parcela se agrega a las cosas.

Si desea dividir la pantalla, puede hacerlo de esta manera:

(por ejemplo para 2 parcelas siguiente juntos)

par(mfrow=c(1,2))

plot(x)

plot(y) 

Reference Enlace

Puede utilizar los puntos para el overplot, que es.

plot(x1, y1,col='red')

points(x2,y2,col='blue')

En lugar de mantener los valores que se representa en una matriz, almacenarlos en una matriz. Por defecto, la matriz entera será tratada como un conjunto de datos. Sin embargo, si se agrega el mismo número de modificadores de la trama, por ejemplo, la col (), ya que tiene filas en la matriz, R se darán cuenta de que cada fila debe ser tratado de forma independiente. Por ejemplo:

x = matrix( c(21,50,80,41), nrow=2 )
y = matrix( c(1,2,1,2), nrow=2 )
plot(x, y, col("red","blue")

Esto debería funcionar a menos que los conjuntos de datos son de diferentes tamaños.

Idiomatic Matlab plot(x1,y1,x2,y2) puede ser traducido en R con ggplot2 por ejemplo de esta manera:

x1 <- seq(1,10,.2)
df1 <- data.frame(x=x1,y=log(x1),type="Log")
x2 <- seq(1,10)
df2 <- data.frame(x=x2,y=cumsum(1/x2),type="Harmonic")

df <- rbind(df1,df2)

library(ggplot2)
ggplot(df)+geom_line(aes(x,y,colour=type))

 introducir descripción de la imagen aquí

Inspirado por parcelas de dos líneas de Tingting Zhao con diferente gama de eje X Usando ggplot2 .

Se puede usar la función ggplotly() de la argumentalmente paquete para activar cualquiera de los gggplot2 ejemplos aquí en una trama interactiva, pero creo que este tipo de trama es mejor sin ggplot2

# call Plotly and enter username and key
library(plotly)
x  <- seq(-2, 2, 0.05)
y1 <- pnorm(x)
y2 <- pnorm(x, 1, 1)

plot_ly(x = x) %>%
  add_lines(y = y1, color = I("red"), name = "Red") %>%
  add_lines(y = y2, color = I("green"), name = "Green")

introducir descripción de la imagen aquí

También puede crear su parcela usando ggvis :

library(ggvis)

x  <- seq(-2, 2, 0.05)
y1 <- pnorm(x)
y2 <- pnorm(x,1,1)
df <- data.frame(x, y1, y2)

df %>%
  ggvis(~x, ~y1, stroke := 'red') %>%
  layer_paths() %>%
  layer_paths(data = df, x = ~x, y = ~y2, stroke := 'blue')

Esto creará la figura siguiente:

introducir descripción de la imagen aquí

también podemos utilizar la biblioteca de celosía

library(lattice)
x <- seq(-2,2,0.05)
y1 <- pnorm(x)
y2 <- pnorm(x,1,1)
xyplot(y1 + y2 ~ x, ylab = "y1 and y2", type = "l", auto.key = list(points = FALSE,lines = TRUE))

En colores específicos

xyplot(y1 + y2 ~ x,ylab = "y1 and y2", type = "l", auto.key = list(points = F,lines = T), par.settings = list(superpose.line = list(col = c("red","green"))))

introducir descripción de la imagen aquí

Uso plotly (solución de plotly con Y primaria y secundaria añadiendo eje- Parece que falta):

library(plotly)     
x  <- seq(-2, 2, 0.05)
y1 <- pnorm(x)
y2 <- pnorm(x, 1, 1)

df=cbind.data.frame(x,y1,y2)

  plot_ly(df) %>%
    add_trace(x=~x,y=~y1,name = 'Line 1',type = 'scatter',mode = 'lines+markers',connectgaps = TRUE) %>%
    add_trace(x=~x,y=~y2,name = 'Line 2',type = 'scatter',mode = 'lines+markers',connectgaps = TRUE,yaxis = "y2") %>%
    layout(title = 'Title',
       xaxis = list(title = "X-axis title"),
       yaxis2 = list(side = 'right', overlaying = "y", title = 'secondary y axis', showgrid = FALSE, zeroline = FALSE))

Captura de demostración de trabajo:

introducir descripción de la imagen aquí

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top