Usando o código a seguir, tentei desenhar quatro gráficos em um gráfico R
. Não estou feliz com a figura, porque há muito espaço entre as parcelas, portanto, a largura das parcelas não é suficiente para analisar as parcelas.
Alguém poderia me ajudar a produzir um bom gráfico com quatro gráficos?
Como posso manter os rótulos do eixo x de 1 a 10 em vez dos 5 rótulos padrão?
Dados:
a1: 11.013 13,814 13,831 13,814 13,787 13,734 13,778 13,771 13,823 13,659
a2: 5,181 7,747 8,314 8,061 7,920 8,153 8,540 8,845 7,881 8,301
Eu usei dados a1 para b1, c1 e d1; dados a2 para b2, c2 e d2 apenas por aqui.
Figura:
Código:
op=par(mfrow=c(4,1), mar=c(5.5,5.1,4.1,2.1))
plot(a1, type="b", ylim=c(0,14.5), xlab="Time (secs)", ylab="", cex.axis=1.4, cex.lab=1.3,cex=1.2,lwd=2.5,col="red1",lty=2,pch=1, main="A")
lines(a2,type="b",pch=3,lty=3,col="darkblue",lwd=2.5,cex=1.2)
par(xpd=T)
legend(1,26.5,c("X","Y"),bty="n",horiz=T,cex=1.5,col=c("red1","darkblue"),text.col=c("red1","darkblue"),pch=c(1,3),lty=c(2,3),x.intersp=0.4,adj=0.2)
plot(b1, type="b", ylim=c(0,14.5), xlab="Time (secs)", ylab="", cex.axis=1.4, cex.lab=1.3,cex=1.2,lwd=2.5,col="red1",lty=2,pch=1, main="B")
lines(b2,type="b",pch=3,lty=3,col="darkblue",lwd=2.5,cex=1.2)
plot(c1, type="b", ylim=c(0,14.5), xlab="Time (secs)", ylab="", cex.axis=1.4, cex.lab=1.3,cex=1.2,lwd=2.5,col="red1",lty=2,pch=1, main="C")
lines(c2,type="b",pch=3,lty=3,col="darkblue",lwd=2.5,cex=1.2)
plot(d1/1000, type="b", ylim=c(0,14.5), xlab="Time (secs)", ylab="", cex.axis=1.4, cex.lab=1.3,cex=1.2,lwd=2.5,col="red1",lty=2,pch=1, main="D")
lines(d2,type="b",pch=3,lty=3,col="darkblue",lwd=2.5,cex=1.2)
> mtext("Price", side=2, at=100,line=3,cex=1.1)
r
data-visualization
samarasa
fonte
fonte
Respostas:
Se você quiser usar algo como o método que você está usando, poderá aprender o comando layout (). Alguns outros detalhes são alterados e você pode aproximar os gráficos. Você também pode colocar as coisas únicas que mudam entre os gráficos em uma lista (como dados e margens) e depois passar por um loop. Além disso, você notará que eu criei o eixo inferior com o comando eixo direto () para que você possa controlar para onde os itens vão.
Devo observar que realmente não me esforcei para tornar isso o mais agradável possível e, em vez de criar o primeiro gráfico fictício, poderia ter apenas espaço suficiente no primeiro quadro. Infelizmente, a configuração mar () tenta preencher o quadro e a margem superior influencia a distância que o rótulo acima está ausente, então eu teria que fazer todos os meus rótulos com mtext () ou text () em vez de apenas usar o cenário principal dentro da trama e eu não estava com vontade de fazer isso
fonte
Eu recomendaria aprender o pacote gráfico de treliça. Eu posso chegar perto do que você quer com algumas linhas. Primeiro, empacote seus dados em um quadro de dados, algo como isto:
que produz:
Em seguida, use a estrutura
xyplot
:que produz um bom gráfico como:
EDITAR:
Se você deseja ter símbolos e linhas diferentes e aparecer na sua legenda, fica complicado, porque você mesmo constrói a legenda e precisa saber como obter as cores padrão da estrutura se não as substituir por si mesma :
EDIT 2:
Você pode simplificar o código e o gráfico, se as duas categorias forem realmente tão simples quanto "X" e "Y":
que usará "X" e "Y" como símbolos de ponto. Você não precisa de nenhuma legenda e pode dedicar ainda mais espaço aos próprios gráficos. (Por outro lado, você pode não gostar da aparência, ou pode achar mais difícil determinar o centro exato do ponto, embora isso não seja tão problemático quanto pode ser, pois a linha passa por cada ponto.)
EDIT 3:
Na verdade, você deve adicionar
strip=F, strip.left=T,
ao gráfico para colocar os rótulos A, B, C, D à esquerda dos gráficos, o que oferece mais espaço em um gráfico longo como este:fonte
grid
coisa: lattice e ggplot2 construídos na grade) .Aqui está uma versão da
ggplot2
solução @ Brandon que incorpora o comportamento da legenda desejada:Acho lendas muito mais fáceis
ggplot2
, mas YMMV.EDITAR
Abordando algumas perguntas nos comentários. Para especificar determinados tipos de ponto ou linha, você usaria
scale_aesthetic_manual
ondeaesthetic
é oushape
,linetype
etc. Por exemplo:A alteração do tamanho de vários rótulos de eixos é feita alterando as configurações do tema, geralmente usando
opts()
. Por exemplo:Você realmente deve mergulhar no site e no livro dele para obter mais informações.
fonte
Semelhante à resposta de Wayne, eu também usaria um pacote diferente, a saber
ggplot2
O que nos dá um gráfico como:
fonte
+ opts(panel.background=theme_blank())
theme_get()
para ver o que pode ser alterado. Em seguida, siga o mesmo padrão como o meu último comentário, colocando-os=theme_blank()
melt()