Me gustaría superponer dos diagramas de dispersión en R para que cada conjunto de puntos tenga su propio eje y (diferente) (es decir, en las posiciones 2 y 4 de la figura) pero los puntos aparezcan superpuestos en la misma figura.
¿Es posible hacer esto con plot
?
Editar código de ejemplo que muestra el problema
# example code for SO question
y1 <- rnorm(10, 100, 20)
y2 <- rnorm(10, 1, 1)
x <- 1:10
# in this plot y2 is plotted on what is clearly an inappropriate scale
plot(y1 ~ x, ylim = c(-1, 150))
points(y2 ~ x, pch = 2)
ggplot2
: stackoverflow.com/questions/3099219/… (buscando SO para[r] two y-axes
o[r] twoord.plot
) - hay algunas otras respuestas relacionadas, aunque (para mi sorpresa, ya que es una R FAQ) nada idénticoRespuestas:
actualización : material copiado que estaba en la wiki de R en http://rwiki.sciviews.org/doku.php?id=tips:graphics-base:2yaxes , enlace ahora roto: también disponible en la máquina wayback
Dos ejes y diferentes en la misma gráfica
(algo de material originalmente de Daniel Rajdl 2006/03/31 15:26)
Tenga en cuenta que hay muy pocas situaciones en las que sea apropiado utilizar dos escalas diferentes en el mismo gráfico. Es muy fácil engañar al espectador del gráfico. Consulte los siguientes dos ejemplos y comentarios sobre este tema ( ejemplo1 , ejemplo2 de Junk Charts ), así como este artículo de Stephen Few (que concluye "Ciertamente no puedo concluir, de una vez por todas, que los gráficos con ejes de doble escala nunca útil; solo que no puedo pensar en una situación que los justifique a la luz de otras soluciones mejores ”). Vea también el punto # 4 en esta caricatura ...
Si está decidido, la receta básica es crear su primer gráfico, configurado
par(new=TRUE)
para evitar que R borre el dispositivo gráfico, crear el segundo gráfico conaxes=FALSE
(y configurarxlab
yylab
estar en blanco -ann=FALSE
también debería funcionar) y luego usaraxis(side=4)
para agregar un nuevo eje en el lado derecho, ymtext(...,side=4)
para agregar una etiqueta de eje en el lado derecho. Aquí hay un ejemplo que usa un poco de datos inventados:twoord.plot()
en elplotrix
paquete automatiza este proceso, al igual quedoubleYScale()
en ellatticeExtra
paquete.Otro ejemplo (adaptado de una publicación de la lista de correo de R por Robert W. Baer):
Se pueden usar recetas similares para superponer gráficos de diferentes tipos: gráficos de barras, histogramas, etc.
fuente
axis(1,pretty(range(time),10))
línea?Como sugiere su nombre,
twoord.plot()
en el paquete plotrix se grafican con dos ejes de ordenadas.fuente
Una opción es hacer dos parcelas una al lado de la otra.
ggplot2
proporciona una buena opción para esto confacet_wrap()
:fuente
Si puede renunciar a las escalas / etiquetas de eje, puede cambiar la escala de los datos al intervalo (0, 1). Esto funciona, por ejemplo, para diferentes trakcs 'wiggle' en cromosomas, cuando generalmente está interesado en correlaciones locales entre las pistas y tienen diferentes escalas (cobertura en miles, Fst 0-1).
Entonces, tener una trama de datos con
chrom
,position
,coverage
yfst
columnas, puede hacer algo como:La ventaja de esto es que no está limitado a dos trakcs.
fuente
Yo también sugiero,
twoord.stackplot()
en losplotrix
gráficos del paquete con más de dos ejes de ordenadas.fuente
Otra alternativa que es similar a la respuesta aceptada por @BenBolker es redefinir las coordenadas de la parcela existente al agregar un segundo conjunto de puntos.
Aquí hay un ejemplo mínimo.
Datos:
Trama:
fuente