Eu gostaria de plotar y1 e y2 na mesma plotagem.
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")
Mas quando faço assim, eles não são plotados no mesmo enredo juntos.
No Matlab, é possível fazer hold on
, mas alguém sabe como fazer isso no R?
?curve
. Useadd=TRUE
.Respostas:
lines()
oupoints()
será adicionado ao gráfico existente, mas não criará uma nova janela. Então você precisaria fazerfonte
plot(sin); curve(cos, add=TRUE)
.lines(x2,y2,...)
vez delines(x,y2,...)
Você também pode usar
par
e plotar no mesmo gráfico, mas em eixos diferentes. Algo da seguinte forma:Se você ler detalhadamente sobre
par
inR
, poderá gerar gráficos realmente interessantes. Outro livro é o R Graphics, de Paul Murrel.fonte
xlab="", ylab="", ...
e alguns outros no segundoplot
.Ao construir plotagens multicamadas, deve-se considerar o
ggplot
pacote. A idéia é criar um objeto gráfico com estética básica e aprimorá-lo gradualmente.ggplot
estilo requer que os dados sejam compactadosdata.frame
.Solução básica:
Aqui
+ operator
é usado para adicionar camadas extras ao objeto básico.Com
ggplot
você tem acesso ao objeto gráfico em todas as etapas da plotagem. Digamos, a configuração passo a passo usual pode ser assim:g
produz o gráfico e você pode vê-lo em todas as etapas (bem, após a criação de pelo menos uma camada). Encantamentos adicionais da trama também são feitos com o objeto criado. Por exemplo, podemos adicionar rótulos para eixos:Final se
g
parece com:ATUALIZAÇÃO (08-11-2013):
Como apontado nos comentários,
ggplot
a filosofia de sugerir o uso de dados em formato longo. Você pode consultar esta resposta para ver o código correspondente.fonte
ggplot
lida com isso mais naturalmente do que o formato "amplo" usado.ggplot
a filosofia de ...Eu acho que a resposta que você está procurando é:
fonte
"add" is not a graphical parameter
aviso e depois imprime o segundo gráfico sobre o primeiro."add" is not a graphical parameter
. Meu R éR version 3.2.3 (2015-12-10)
. Você pode usar opar(new=TRUE)
comando entre esses gráficos.Use a
matplot
função:use isso se
y1
ey2
for avaliado nos mesmosx
pontos. Ele escala o eixo Y para se ajustar ao que for maior (y1
ouy2
), ao contrário de outras respostas aqui que serão cortadas se ficaremy2
maiores quey1
(as soluções ggplot geralmente estão de acordo com isso).Como alternativa, e se as duas linhas não tiverem as mesmas coordenadas x, defina os limites do eixo no primeiro gráfico e adicione:
Estou surpreso que este Q tenha 4 anos e ninguém tenha mencionado
matplot
oux/ylim
...fonte
tl; dr: você deseja usar
curve
(comadd=TRUE
) oulines
.Não concordo
par(new=TRUE)
porque isso imprimirá duas marcas de escala e rótulos de eixo. Por exemploA saída de
plot(sin); par(new=T); plot( function(x) x**2 )
.Veja como estão confusos os rótulos dos eixos verticais! Como os intervalos são diferentes, você precisaria definir
ylim=c(lowest point between the two functions, highest point between the two functions)
, o que é menos fácil do que o que vou mostrar --- e muito menos fácil se você quiser adicionar não apenas duas curvas, mas muitas.O que sempre me confundiu sobre plotagem é a diferença entre
curve
elines
. (Se você não se lembra de que esses são os nomes dos dois importantes comandos de plotagem, basta cantá- lo.)Aqui está a grande diferença entre
curve
elines
.curve
irá traçar uma função, comocurve(sin)
.lines
lotes de pontos com valores xey, como:lines( x=0:10, y=sin(0:10) )
.E aqui está uma pequena diferença:
curve
precisa ser chamadoadd=TRUE
para o que você está tentando fazer, enquantolines
já assume que você está adicionando a um gráfico existente.Aqui está o resultado da chamada
plot(0:2); curve(sin)
.Nos bastidores, confira
methods(plot)
. E confirabody( plot.function )[[5]]
. Quando você chamaplot(sin)
R, descobre quesin
é uma função (e não valores y) e usa oplot.function
método, que acaba chamandocurve
. Assimcurve
é a ferramenta destinada a lidar com funções.fonte
se você quiser dividir o gráfico em duas colunas (2 gráficos um ao lado do outro), faça o seguinte:
Link de referência
fonte
Conforme descrito por @redmode, você pode plotar as duas linhas no mesmo dispositivo gráfico usando
ggplot
. Nessa resposta, os dados estavam em um formato "amplo". No entanto, ao usá-ggplot
lo, geralmente é mais conveniente manter os dados em um quadro de dados em um formato 'longo'. Então, usando diferentes 'variáveis de agrupamento' nosaes
argumentos téticos, as propriedades da linha, como tipo de linha ou cor, variarão de acordo com a variável de agrupamento e as legendas correspondentes aparecerão.Nesse caso, podemos usar a
colour
estética, que corresponde à cor das linhas em diferentes níveis de uma variável no conjunto de dados (aqui: y1 vs y2). Mas primeiro precisamos derreter os dados do formato amplo para o longo, usando, por exemplo, a função 'derreter' doreshape2
pacote. Outros métodos para remodelar os dados são descritos aqui: Remodelando data.frame do formato amplo para o longo .fonte
Se você estiver usando gráficos de base (ou seja, não gráficos de malha / grade), poderá imitar o recurso de espera do MATLAB usando as funções de pontos / linhas / polígonos para adicionar detalhes adicionais aos seus gráficos sem iniciar um novo gráfico. No caso de um layout de plotagem múltipla, você pode usar
par(mfg=...)
para escolher em qual plotagem você adiciona itens.fonte
Você pode usar pontos para a plotagem, isto é.
fonte
Em vez de manter os valores a serem plotados em uma matriz, armazene-os em uma matriz. Por padrão, a matriz inteira será tratada como um conjunto de dados. No entanto, se você adicionar o mesmo número de modificadores ao gráfico, por exemplo, col (), como você possui linhas na matriz, R descobrirá que cada linha deve ser tratada independentemente. Por exemplo:
Isso deve funcionar, a menos que seus conjuntos de dados tenham tamanhos diferentes.
fonte
Idiomatic Matlab
plot(x1,y1,x2,y2)
pode ser traduzido em R com,ggplot2
por exemplo, desta maneira:Inspirado nos gráficos de linha dupla de Tingting Zhao com diferentes faixas de eixo x usando ggplot2 .
fonte
Você pode usar a
ggplotly()
função do pacote plotly para transformar qualquer um dos exemplos do gggplot2 aqui em um gráfico interativo, mas acho que esse tipo de gráfico é melhor sem o ggplot2 :fonte
Você também pode criar seu gráfico usando ggvis :
Isso criará o seguinte gráfico:
fonte
Usando
plotly
(adicionando solução doplotly
eixo y primário e secundário - parece estar faltando):Captura de tela da demonstração de trabalho:
fonte
Error in library(plotly) : there is no package called ‘plotly’
por quê?plotly
? Você precisa instalar o pacote usando oinstall.packages("plotly")
comandotambém podemos usar a biblioteca de treliça
Para cores específicas
fonte