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

10
demandé sur sim 2012-06-04 17:39:56

4 réponses

Ou vous pouvez utiliser arrows fonction dans R.

plot(c(0,1),c(0,1))
arrows(0,0,1,1)
13
répondu danas.zuokas 2012-06-04 13:51:55
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]) ) ))

enter image description here

veuillez noter que le list fonction à l'intérieur du expression appel est un plotmath listappel, 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".

10
répondu 42- 2016-03-28 23:03:09

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")
1
répondu runlevel0 2015-01-29 16:30:40

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.

0
répondu heltonbiker 2012-06-04 13:59:16