Tracer les vecteurs dans un système de coordonnées avec R ou python
je cherche des conseils sur le traçage des vecteurs dans le plan cartésien. La tâche est de tracer des points (coordonnées) et ensuite de les relier avec une flèche à un point de source (disons 0,0). L'image ci-dessous devrait donner une idée. Je ne me soucie pas des couleurs et de nommer des vecteurs/points, il s'agit juste de tracer des flèches dans le plan de coordonnées. Je suis sûr qu'il existe une bibliothèque en R (ou en python) pour tracer les vecteurs et les opérations de l'algèbre linéaire.
tout pointeur serait apprécié!
vecteurs dans un plan http://mathinsight.org/media/image/image/vector_2d_add.png
4 réponses
Ou vous pouvez utiliser arrows
fonction dans R.
plot(c(0,1),c(0,1))
arrows(0,0,1,1)
plot(NA, xlim=c(0,5), ylim=c(0,5), xlab="X", ylab="Y")
vecs <- data.frame(vname=c("a","b","a+b", "transb"),
x0=c(0,0,0,2),y0=c(0,0,0,1), x1=c(2,1,3,3) ,y1=c(1,2,3,3),
col=1:4)
with( vecs, mapply("arrows", x0, y0, x1,y1,col=col) )
Il aura l'air un peu mieux si vous ajoutez lwd=3 arrows
appel. permet l'étiquetage et peut être tournée avec le paramètre' srt'.
plot(NA, xlim=c(0,5), ylim=c(0,5), xlab="X", ylab="Y", lwd=3)
with( vecs, mapply("arrows", x0, y0, x1,y1,col=col,lwd=3) )
with(vecs, mapply('text', x=x1[1:3]-.1, y=y1[1:3]+.1,
labels=expression(list(a[1],a[2]), list(b[1],b[2]), list(a[1]+b[1],a[2]+b[2]) ) ))
veuillez noter que le list
fonction à l'intérieur du expression
appel est un plotmath list
appel, différente de la R list
tout comme plotmath-paste
est différent de paste
. Il ne fait aucune tentative pour évaluer son argument dans le parent-cadre. Pour que l'on aurait besoin d' bquote
ou substitute
et aurait probablement besoin d'utiliser sapply
être utilisé pour traiter les expressions "intérieur".
une façon facile(TM) de dessiner quelques vecteurs aléatoires de magnitude 2. Je calcule d'abord la norme euclidienne, sinon la fonction de flèche tracera des flèches d'un point à l'autre créant un triangle, nice comme une explication, mais pas ce que nous voulons. Le reste est simple:
#first some vectors
v1<-c(-3,5)
v2<-c(2,-10)
v3 <-c(0,-3)
v4 <- c(2,5)
# This one for the coordinates of the plot
ax<-c(-10,10)
# I will need the euclidean norm (two-norm) of the vectors:
mag <- function(x) sqrt(sum(x^2))
# I call plot to set up the "canvas"
plot(ax,ax,main="Test")
# I do the stuffz, the FIRST pair of params is the ORIGIN
arrows(0,0, mag(v1),mag(v2),lwd=4,col="red")
arrows(-2,1, mag(v3),mag(v4),lwd=4,col="blue")
La plus évidente consisterait à utiliser python matplotlib
package, qui a beaucoup de fonctionnalités de traçage.
spécifiquement, vous aimeriez rétro-ingénieur cet exemple.
une autre façon d'obtenir de bons résultats, d'une manière plus artistique et moins cartésienne, serait de créer et de rendre SVG en utilisant rsvg
. Je n'ai jamais essayé, mais SVG devrait avoir un support natif pour les flèches. Aussi, les fichiers SVG peuvent être édités dans des programmes de dessin comme Inkscape si nécessaire.