Gostaria de sobrepor dois gráficos de dispersão em R para que cada conjunto de pontos tenha seu próprio eixo y (diferente) (ie, nas posições 2 e 4 da figura), mas os pontos apareçam sobrepostos na mesma figura.
É possível fazer isso plot
?
Editar código de exemplo mostrando o 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/… (pesquisando SO[r] two y-axes
ou[r] twoord.plot
) - existem algumas outras respostas relacionadas, embora (para minha surpresa, pois seja uma R FAQ) nada idênticoRespostas:
update : Material copiado que estava no wiki do R em http://rwiki.sciviews.org/doku.php?id=tips:graphics-base:2yaxes , link agora quebrado: também disponível na máquina wayback
Dois eixos y diferentes no mesmo gráfico
(algum material originalmente de Daniel Rajdl 31/03/2006 15:26)
Observe que há muito poucas situações em que é apropriado usar duas escalas diferentes no mesmo gráfico. É muito fácil enganar o visualizador do gráfico. Verifique os dois exemplos e comentários a seguir sobre esse problema ( exemplo1 , exemplo2 da Junk Charts ), bem como este artigo de Stephen Few (que conclui “Certamente não posso concluir, de uma vez por todas, que gráficos com eixos de escala dupla nunca são útil, só que não consigo pensar em uma situação que os justifique à luz de outras soluções melhores. ”) Veja também o ponto 4 deste desenho animado ...
Se você estiver determinado, a receita básica é criar seu primeiro gráfico, definido
par(new=TRUE)
para impedir que R limpe o dispositivo gráfico, criando o segundo gráfico comaxes=FALSE
(e definindoxlab
e ficandoylab
em branco -ann=FALSE
também deve funcionar) e, em seguida, usandoaxis(side=4)
para adicionar um novo eixo no lado direito emtext(...,side=4)
para adicionar um rótulo de eixo no lado direito. Aqui está um exemplo usando um pouco de dados inventados:twoord.plot()
noplotrix
pacote automatiza esse processo, como acontecedoubleYScale()
nolatticeExtra
pacote.Outro exemplo (adaptado de uma postagem da lista de discussão de Robert W. Baer):
Receitas semelhantes podem ser usadas para sobrepor gráficos de diferentes tipos - gráficos de barras, histogramas etc.
fonte
axis(1,pretty(range(time),10))
linha?Como o próprio nome sugere,
twoord.plot()
no pacote plotrix plota com dois eixos ordenados.fonte
Uma opção é fazer duas parcelas lado a lado.
ggplot2
fornece uma boa opção para isso comfacet_wrap()
:fonte
Se você pode desistir dos rótulos de escalas / eixos, pode redimensionar os dados para o intervalo (0, 1). Isso funciona, por exemplo, para diferentes traços de 'manobra' nos cromossomos, quando você geralmente está interessado em correlações locais entre as faixas e elas têm escalas diferentes (cobertura em milhares, Fst 0-1).
Então, ter um quadro de dados com
chrom
,position
,coverage
efst
colunas, você pode fazer algo como:A vantagem disso é que você não está limitado a dois trakcs.
fonte
Eu também sugiro,
twoord.stackplot()
nasplotrix
parcelas do pacote com mais de dois eixos ordenados.fonte
Outra alternativa semelhante à resposta aceita por @BenBolker é redefinir as coordenadas do gráfico existente ao adicionar um segundo conjunto de pontos.
Aqui está um exemplo mínimo.
Dados:
Enredo:
fonte