Me gustaría trazar y1 e y2 en la misma trama.
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 lo hago así, no se trazan en la misma trama juntos.
En Matlab se puede hacer hold on, pero ¿alguien sabe cómo hacer esto en R?

?curve. Usoadd=TRUE.Respuestas:
lines()opoints()se agregará al gráfico existente, pero no creará una nueva ventana. Entonces deberías hacerfuente
plot(sin); curve(cos, add=TRUE).lines(x2,y2,...)lugar delines(x,y2,...)También puede usar
pary trazar en el mismo gráfico pero en diferentes ejes. Algo como sigue:Si lees en detalle sobre
parinR, podrás generar gráficos realmente interesantes. Otro libro para mirar es R Graphics de Paul Murrel.fuente
xlab="", ylab="", ...y algunos otros en el segundoplot.Al construir parcelas multicapa, uno debe considerar el
ggplotpaquete. La idea es crear un objeto gráfico con una estética básica y mejorarlo gradualmente.ggplotel estilo requiere que se empaqueten los datosdata.frame.Solución básica:
Aquí
+ operatorse usa para agregar capas adicionales al objeto básico.Con
ggplotusted tiene acceso a objetos gráficos en cada etapa del trazado. Digamos, la configuración habitual paso a paso puede verse así:gproduce la trama, y puede verla en cada etapa (bueno, después de crear al menos una capa). Otros encantamientos de la trama también se realizan con el objeto creado. Por ejemplo, podemos agregar etiquetas para ejes:El final se
gve así:ACTUALIZACIÓN (2013-11-08):
Como se señaló en los comentarios,
ggplotla filosofía sugiere utilizar datos en formato largo. Puede consultar esta respuesta para ver el código correspondiente.fuente
ggplotmaneja esto de forma más natural que el formato "ancho" que utiliza.ggplotla filosofía 's ...Creo que la respuesta que estás buscando es:
fuente
"add" is not a graphical parameteradvertencia y luego imprime el segundo diagrama sobre el primero."add" is not a graphical parameter. Mi R esR version 3.2.3 (2015-12-10). Puede usar elpar(new=TRUE)comando entre estas parcelas.Usa la
matplotfunción:use esto si
y1yy2se evalúan en los mismosxpuntos. Escala el eje Y para que se ajuste al que sea más grande (y1oy2), a diferencia de algunas de las otras respuestas aquí que se recortarány2si se hace más grande quey1(las soluciones de ggplot en su mayoría están bien con esto).Alternativamente, y si las dos líneas no tienen las mismas coordenadas x, establezca los límites del eje en el primer diagrama y agregue:
Me sorprende que este Q tenga 4 años y nadie lo haya mencionado
matplotox/ylim...fuente
tl; dr: desea usar
curve(conadd=TRUE) olines.No estoy de acuerdo con
par(new=TRUE)porque eso imprimirá dos marcas de graduación y etiquetas de eje. P.ejLa salida de
plot(sin); par(new=T); plot( function(x) x**2 ).¡Mira lo desordenadas que están las etiquetas del eje vertical! Dado que los rangos son diferentes, necesitaría establecerlos
ylim=c(lowest point between the two functions, highest point between the two functions), lo cual es menos fácil de lo que estoy a punto de mostrarle, y mucho menos fácil si desea agregar no solo dos curvas, sino muchas.Lo que siempre me confundió acerca de trazar es la diferencia entre
curveylines. (Si no puede recordar que estos son los nombres de los dos comandos de trazado importantes, simplemente cántelo ).Aquí está la gran diferencia entre
curveylines.curvetrazará una función, comocurve(sin).linesparcelas puntos con valores x e y, como:lines( x=0:10, y=sin(0:10) ).Y aquí hay una pequeña diferencia:
curvedebe llamarse conadd=TRUElo que está tratando de hacer, mientras quelinesya asume que está agregando a una trama existente.Aquí está el resultado de llamar
plot(0:2); curve(sin).Detrás de escena, echa un vistazo
methods(plot). Y verificabody( plot.function )[[5]]. Cuando llamas aplot(sin)R, descubres quesines una función (no valores de y) y usa elplot.functionmétodo, que termina llamandocurve. Asícurvees la herramienta destinada a manejar funciones.fuente
Si desea dividir la trama en dos columnas (2 parcelas una al lado de la otra), puede hacerlo así:
Link de referencia
fuente
Según lo descrito por @redmode, puede trazar las dos líneas en el mismo dispositivo gráfico usando
ggplot. En esa respuesta, los datos estaban en un formato 'ancho'. Sin embargo, cuando se usaggplotgeneralmente es más conveniente mantener los datos en un marco de datos en un formato 'largo'. Luego, mediante el uso de diferentes 'variables de agrupación' en losaesargumentos de temas, las propiedades de la línea, como el tipo de línea o el color, variarán de acuerdo con la variable de agrupación, y aparecerán las leyendas correspondientes.En este caso, podemos usar la
colourestética, que hace coincidir el color de las líneas con diferentes niveles de una variable en el conjunto de datos (aquí: y1 vs y2). Pero primero necesitamos derretir los datos de formato ancho a largo, usando, por ejemplo, la función 'derretir' delreshape2paquete. Aquí se describen otros métodos para remodelar los datos: Reformar data.frame de formato ancho a largo .fuente
Si está utilizando gráficos base (es decir, no gráficos de cuadrícula / cuadrícula), puede imitar la función de retención de MATLAB utilizando las funciones de puntos / líneas / polígonos para agregar detalles adicionales a sus gráficos sin comenzar un nuevo gráfico. En el caso de un diseño multiplot, puede usar
par(mfg=...)para elegir a qué gráfico agregar cosas.fuente
Puede usar puntos para la sobreparcela, es decir.
fuente
En lugar de mantener los valores que se trazarán en una matriz, almacénelos en una matriz. Por defecto, toda la matriz se tratará como un conjunto de datos. Sin embargo, si agrega la misma cantidad de modificadores al gráfico, por ejemplo, col (), ya que tiene filas en la matriz, R descubrirá que cada fila debe tratarse de forma independiente. Por ejemplo:
Esto debería funcionar a menos que sus conjuntos de datos sean de diferentes tamaños.
fuente
Idiomatic Matlab
plot(x1,y1,x2,y2)se puede traducir en R con,ggplot2por ejemplo, de esta manera:Inspirado en los trazados de doble línea de Tingting Zhao con diferentes rangos de eje x con ggplot2 .
fuente
Podría usar la
ggplotly()función del paquete plotly para convertir cualquiera de los ejemplos de gggplot2 aquí en un diagrama interactivo, pero creo que este tipo de diagrama es mejor sin ggplot2 :fuente
También puede crear su trama usando ggvis :
Esto creará la siguiente trama:
fuente
Usando
plotly(agregando solución desde elplotlyeje y primario y secundario- Parece que falta):Captura de pantalla de la demostración de trabajo:
fuente
Error in library(plotly) : there is no package called ‘plotly’¿por qué?plotly? Necesita instalar el paquete usando elinstall.packages("plotly")comando.también podemos usar la biblioteca de celosía
Para colores específicos
fuente