J'utilise la fonction SatterPlot de l'emballage de voiture pour générer une dispersion. Je veux pouvoir générer une ligne de référence dans l'intrigue qui devrait être x = y. J'ai essayé d'utiliser Abline et il ajoute une ligne mais ce n'est pas la ligne X = y. Quelqu'un peut-il aider?
Mon code est comme suit:
scatterplot(phenos$P1~pheno$P0, data=pheno,spread=FALSE,ylab="6 month timepoint", xlab="Baseline Timepoint", jitter=list(x=1, y=1))
abline(0,1)
Merci.
C'est en fait assez difficile/piraquable, car scatterplot()
Utilisations internes layout
, ce qui permet de contrôler le sous-titre actuellement utilisé par le pilote graphique. (-Mise à jour: C'est plus difficile que je pensais - la définition par("mfg")
doit avoir travaillé plus ou moins par accident.)
Données de maquillage (Mise à jour: Utiliser des données avec des signes X et Y non égaux zéro et ne sont pas égaux les uns aux autres, car il illustrent les difficultés d'utilisation naïvement à l'aide de abline()
plus clairement)
set.seed(1)
d <- data.frame(x=rnorm(10,mean=10),y=rnorm(10,mean=12))
library(car)
Essayez mon ancienne stratégie (qui ne fonctionne pas réellement, ou ne fonctionne que de manière imprévisible):
scatterplot(y~x,data=d,reset.par=FALSE)
k <- 1
for (i in 1:2) {
for (j in 1:2) {
par(mfg=c(i,j,2,2))
abline(0,1,lwd=3,col=k)
k <- k+1
}
}
En fonction de la façon dont je fais cela, je reçois des avertissements et des erreurs ou des réponses de faux. Il semble compter si je fais la scatterplot()
appelle à l'intérieur d'une fonction ... ??
Deuxièmement, essayez, plus de conservation: reconstruire la mise en page de zéro.
scatterplot(y~x,data=d)
uu <- par("usr")
## mimic layout frolm car:::scatterplot.default. Would be different if we were drawing only one
## of x-boxes or y-boxes
layout(matrix(c(1, 0, 3, 2), 2, 2), widths = c(5, 95),
heights = c(95, 5))
oldmar <- par(mar=rep(0,4)) ## zero out margins so we can plot in sub-boxes without errors
## now skip through the first two sub-plots
par(new=TRUE); plot.new(); par(new=TRUE); plot.new()
par(oldmar) ## reset margins
## blank plot with user limits set and 'interior' axis calculations
plot(0:1,0:1,xlab="",ylab="",xlim=uu[1:2],ylim=uu[3:4],xaxs="i",yaxs="i")
## add annotation
abline(a=0,b=1,col=4,lwd=3)
Compte tenu de la quantité d'effort et de fragilité de cette solution, il pourrait en réalité être le meilleur de hack scatterplot
_ pour permettre éventuellement abline()
à spécifier ou de demander au responsable de cette capacité ...
Vous pouvez atteindre votre objectif de la même fonction abline
. Utilisez la fonction abline(a=0, b=1)
Où a
et b
sont respectivement l'interception et le pont de la ligne. Cela vous attire une ligne droite de la forme Y = a + b*x
.
J'espère que cela t'aides.
Je viens d'utiliser la fonction Segments: segments (x0 = 0, y0 = 0, x1 = 45, y1 = 45)
Faites simplement que les valeurs Y vont juste au-dessus des limites de votre parcelle.
Cette fonction est également agréable car elle ne change pas vos limites X et Y afin que la ligne puisse fonctionner propre sur votre graphique sans avoir à choisir avec précision les valeurs X et Y.