En utilisant le code suivant, j'ai essayé de dessiner quatre graphiques sur un graphique R
. Je ne suis pas satisfait du chiffre car il y a beaucoup d'espace entre les parcelles, donc la largeur des parcelles n'est pas suffisante pour analyser les parcelles.
Quelqu'un pourrait-il m'aider à produire un joli graphique comportant quatre tracés?
Comment puis-je conserver les étiquettes de l'axe des x de 1 à 10 au lieu des 5 étiquettes par défaut?
Les données:
a1: 11,013 13,814 13,831 13,714 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
J'ai utilisé les données a1 pour b1, c1 et d1; données a2 pour b2, c2 et d2 juste pour ici.
Figure:
Code:
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
la source
la source
Réponses:
Si vous voulez vous en tenir à quelque chose comme la méthode que vous avez utilisée, vous voudrez peut-être apprendre la commande layout (). Quelques autres changements de détails et vous pouvez rapprocher les graphiques. Vous pouvez également mettre les éléments uniques qui changent entre les graphiques dans une liste (comme les données et les marges), puis parcourir une boucle. De plus, vous remarquerez que j'ai créé l'axe inférieur avec la commande direct axis () afin que vous puissiez contrôler où vont les éléments.
Je devrais noter que je n'ai vraiment pas fait d'effort pour rendre cela aussi agréable que possible et au lieu de faire ce premier graphique factice, j'aurais pu juste mettre assez d'espace dans la première image. Malheureusement, le paramètre mar () essaie de remplir le cadre et la marge supérieure influence la distance à laquelle l'étiquette au-dessus du graphique est éloignée, je devrais donc faire toutes mes étiquettes avec mtext () ou text () au lieu d'utiliser simplement le paramètre principal dans l'intrigue et je n'avais pas envie de faire ça
la source
Je recommanderais d'apprendre le package graphique en treillis. Je peux me rapprocher de ce que vous voulez en quelques lignes. Tout d'abord, regroupez vos données dans un bloc de données, quelque chose comme ceci:
ce qui donne:
Ensuite, utilisez le treillis
xyplot
:ce qui donne un joli graphique comme:
ÉDITER:
Si vous voulez avoir différents symboles et lignes et que cela apparaisse dans votre légende, cela se complique, car vous créez littéralement la légende vous-même, et vous devez savoir comment obtenir les couleurs de réseau par défaut si vous ne les avez pas remplacées vous-même :
EDIT 2:
Vous pouvez simplifier le code et le graphique, si les deux catégories sont vraiment aussi simples que "X" et "Y":
qui utilisera "X" et "Y" comme symboles ponctuels. Vous n'avez pas du tout besoin d'une légende et pouvez alors consacrer encore plus d'espace aux graphiques eux-mêmes. (D'un autre côté, vous pourriez ne pas aimer l'apparence ou trouver plus difficile de déterminer le centre exact du point, bien que ce ne soit pas autant un problème que cela pourrait être puisque la ligne passe par chaque point.)
EDIT 3:
En fait, vous devriez ajouter
strip=F, strip.left=T,
à l'intrigue, pour placer les étiquettes A, B, C, D à gauche des graphiques, ce qui vous donne plus d'espace sur un long graphique comme celui-ci:la source
grid
chose: treillis et ggplot2 construits sur la grille) .Voici une version de la
ggplot2
solution de @ Brandon qui incorpore le comportement de légende souhaité:Je trouve que les légendes sont beaucoup plus faciles
ggplot2
, mais YMMV.ÉDITER
Répondre à quelques questions dans les commentaires. Pour définir le point ou de certains types ligne, vous utilisez
scale_aesthetic_manual
oùaesthetic
est soitshape
,linetype
etc. Par exemple:La modification de la taille des différentes étiquettes d'axe se fait en modifiant les paramètres du thème, généralement à l'aide de
opts()
. Par exemple:Vous devriez vraiment plonger dans le site Web et son livre pour plus d'informations.
la source
Semblable à la réponse de Wayne, j'utiliserais également un package différent, à savoir
ggplot2
Ce qui nous donne un graphique comme:
la source
+ opts(panel.background=theme_blank())
theme_get()
pour voir ce que vous pouvez modifier. Ensuite, suivez le même modèle que mon dernier commentaire, en les définissant=theme_blank()
melt()