tracer des fonctions remplie point de symboles et de légendes
Je veux tracer les deux fonctions dans différentes couleurs et de styles avec une légende, dans la plaine R.
J'ai plusieurs questions:
-
Je suis en utilisant
pch=21
etpch=22
. Ma compréhension, c'est qu'ils sont "remplis" de symboles. Ils ne semblent pleins comme prévu dans la légende, mais ils semblent creux sur le graphique lui-même. Quel est le problème? -
Puis-je obtenir plus d'espace entre les points, sans spécification d'une grille manuellement? peut-être en sélectionnant le nombre de points pour être imprimé?
-
N'hésitez pas à ajouter tout type de conseils que vous souhaitez. Je suis très nouveau à R. En particulier, est-il une meilleure façon de tracer les deux fonctions? par exemple, en définissant des vecteurs de fonctions? et ne serait-il pas y avoir un moyen pour la légende pour être automatiquement généré sans avoir à spécifier les couleurs et les formes, dans la plaine de R?
Voici mon code:
par(new=TRUE)
p1 <- plot(function(x){ x^(2)/2 }
, 0, 100
, xlab = "x"
, ylab = "y"
, ylim = c(0,5000)
, las = 1
, type = "p"
, cex = 0.8
, pch = 21
, col = "red"
)
par(new=TRUE)
p2 <- plot(function(x){ (1-x^(2))/2 }
, 0, 100
, xlab = ""
, ylab = ""
, axes = FALSE
, type = "p"
, cex = 0.8
, pch = 22
, col = "blue"
)
par(new=TRUE)
l <- legend( "topleft"
, inset = c(0,0.4)
, cex = 1.5
, bty = "n"
, legend = c("A", "B")
, text.col = c("red", "blue")
, pt.bg = c("red","blue")
, pch = c(21,22)
)
Après diverses explorations, j'ai opté pour l'utilisation de la par(new=TRUE)
"truc" pour superposer les deux fonctions (plutôt que, par exemple, à l'aide de matplot ou une combinaison de l'intrigue et de points ou de mise en page). Était-ce un mauvais coup pour commencer? (Edit: oui, très mal, voir ci-dessous) +1 si vous ne me demandez pas de lire le manuel 😉
Edit: Résumé des Solutions
Grâce à joran et Didzis Elferts, j'ai obtenu une solution à plusieurs de mes problèmes. Pour l'enregistrement, j'aimerais résumer ici:
-
Pour obtenir rempli de symboles sur le graphique, vous devez spécifier à la fois le col (couleur) et bg (background). Cela est vrai même pour
pch=21
etpch=22
, qui ne sont pas automatiquement rempli par la couleur spécifiée. Pour obtenir rempli de symboles dans la légende, vous devez spécifier à la fois le col et le pt.bg. Ici, bg seul n'est pas assez bon. -
c'est une très mauvaise idée d'utiliser
par(new=TRUE)
avecaxes=FALSE
, comme je l'avais fait d'abord, parce que, la superposition de parcelles ne sont pas nécessairement utiliser le même système de coordonnées. La fonction prévue pour le deuxième tracé a été(100^2-x^2)/2
mais par hasard, j'ai écrit(1-x^2)/2
et ne s'en rendent pas compte parce que j'avais mis axes=FALSE.
Tous dans tous, voici ma solution préférée:
curve( x^2/2
, from = 0
, to = 100
, n = 30
, type = "p"
, pch = 21 # alternatively pch=15 is a solid symbol
, col = "red" # colors the outline of hollow symbol pch=21
, bg = "red" # fills hollow symbol pch=21 with color
, xlab = "x"
, ylab = "y"
)
curve( (100^2-x^2)/2
, from = 0
, to = 100
, n = 30
, type = "p"
, pch = 22 # alternative pch=16
, col = "blue"
, bg = "blue"
, add = TRUE
)
legend( "topleft"
, inset = c(0,0.4),
, cex = 1.5,
, bty = "n",
, legend = c("A", "B"),
, text.col = c("red", "blue"),
, col = c("red", "blue"),
, pt.bg = c("red","blue")
, pch = c(21,22)
)
Cela donne un terrain comme celui montré par joran. Merci beaucoup à vous deux pour votre aide.
- Vous dit de manière explicite la légende de remplir les symboles de point par la mise en
pt.bg
. - Grâce joran, je ne savais pas que. Si j'utilise le col au lieu de pt.bg, les symboles sont creux dans la légende comme ils le sont dans l'intrigue.
- Oui, voir ma réponse, qui aborde la plupart des questions que vous soulevez.
- Bon résumé! Notez que le but principal de
pch
21 et 22 est la possibilité de définir des couleurs différentes pour le contour et le remplissage de chaque point. Lorsque vous voulez un point particulier, n'avoir qu'une couleur, c'est plus facile à utiliserpch
15 et 16. Lors de l'utilisation de 15 et 16 ans, vous n'avez pas à vous soucier debg
etpt.bg
à tous. - Grâce shujaa. J'avais mal compris ce. Je comprends maintenant que j'étais à la recherche d'un SOLIDE symbole plutôt qu'un symbole. Rempli de symboles ne sont pas automatiquement rempli avec le symbole de la couleur. Donc oui, les pouces pour pch=15,16. Joran a laissé entendre que, dans sa réponse, mais je n'avais pas compris la première fois.
Vous devez vous connecter pour publier un commentaire.
Je pense que tu aurais peut-être avoir plus de chance en utilisant
curve
:Noter que j'ai eu à retoucher vos fonctions légèrement, pour obtenir la sortie correspondant à votre image.
Pour éviter de spécifier la couleur et de remplir séparément (ce qui en général est de savoir comment les choses sont faites dans R), j'ai utilisé certains anciens "héritage" des symboles. À l'aide de
curve
est souvent beaucoup plus simple pour tracer des fonctions ou des expressions. Il vous donne également un moyen plus pratique pour spécifier la grille de points à évaluer. Il dispose également d'uneadd
argument qui vous permet de passer les maladroitspar
de piratage vous vous êtes engagé dans.curve
est principalement pour des raisons de clarté.plot.function
est fondamentalement juste un wrapper pourcurve
.Vous devez ajouter un argument
bg="red"
oubg="blue"
à l'intérieur deplot()
pour obtenir le rempli de symboles avec une couleur particulière.