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
par
y trazar en el mismo gráfico pero en diferentes ejes. Algo como sigue:Si lees en detalle sobre
par
inR
, 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
ggplot
paquete. La idea es crear un objeto gráfico con una estética básica y mejorarlo gradualmente.ggplot
el estilo requiere que se empaqueten los datosdata.frame
.Solución básica:
Aquí
+ operator
se usa para agregar capas adicionales al objeto básico.Con
ggplot
usted tiene acceso a objetos gráficos en cada etapa del trazado. Digamos, la configuración habitual paso a paso puede verse así:g
produce 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
g
ve así:ACTUALIZACIÓN (2013-11-08):
Como se señaló en los comentarios,
ggplot
la filosofía sugiere utilizar datos en formato largo. Puede consultar esta respuesta para ver el código correspondiente.fuente
ggplot
maneja esto de forma más natural que el formato "ancho" que utiliza.ggplot
la filosofía 's ...Creo que la respuesta que estás buscando es:
fuente
"add" is not a graphical parameter
advertencia 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
matplot
función:use esto si
y1
yy2
se evalúan en los mismosx
puntos. Escala el eje Y para que se ajuste al que sea más grande (y1
oy2
), a diferencia de algunas de las otras respuestas aquí que se recortarány2
si 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
matplot
ox/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
curve
ylines
. (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
curve
ylines
.curve
trazará una función, comocurve(sin)
.lines
parcelas puntos con valores x e y, como:lines( x=0:10, y=sin(0:10) )
.Y aquí hay una pequeña diferencia:
curve
debe llamarse conadd=TRUE
lo que está tratando de hacer, mientras quelines
ya 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 quesin
es una función (no valores de y) y usa elplot.function
método, que termina llamandocurve
. Asícurve
es 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 usaggplot
generalmente 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 losaes
argumentos 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
colour
esté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' delreshape2
paquete. 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,ggplot2
por 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 elplotly
eje 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