我正在寻找关于在笛卡尔平面上绘制矢量的建议。任务是绘制点(坐标),然后用箭头将它们链接到某个源点(比如0,0)。下面的图片应该给出一个想法。我不关心颜色和命名向量/点,它只是在坐标平面中绘制箭头。我确信R(或python)中存在一些用于绘制线性代数向量和运算的库。
任何指针都将不胜感激!
vectors in a plane http://mathinsight.org/media/image/image/vector_2d_add.png
答案 0 :(得分:13)
或者您可以在R。
中使用arrows
功能
plot(c(0,1),c(0,1))
arrows(0,0,1,1)
答案 1 :(得分:10)
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) )
如果在arrows
调用中添加lwd = 3,效果会好一些。 text
函数允许标记,可以使用'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]) ) ))
注意list
调用中的expression
函数是一个plotmath list
- 调用,与常规R list
不同,就像plotmath一样 - {{1} }与常规paste
不同。它不会尝试在父框架中评估其参数。对于那个,需要paste
或bquote
,并且可能需要使用substitute
来处理“内部”表达式。
答案 2 :(得分:1)
以Easy(TM)方式绘制一些随机幅度为2的向量。我首先计算欧几里德范数,否则箭头函数将从点到点绘制箭头,创建一个三角形,很好地作为解释,但不是我们想要的。其余的很简单:
#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")
答案 3 :(得分:0)
最明显的做法是使用python的matplotlib
包,它有很多绘图功能。
具体而言,您希望对this example进行逆向工程。
以更具艺术性和更少笛卡尔的方式获得更好结果的另一种方法是使用rsvg
创建和呈现SVG。我从来没有尝试过,但SVG本应支持箭头。此外,如果需要,可以在Inkscape等绘图程序中编辑SVG文件。
答案 4 :(得分:0)
library(matlib)
#setting up the plot
xlim <- c(0,6)
ylim <- c(0,6)
par(mar=c(3,3,1,1)+.1)
plot(xlim, ylim, type="n", xlab="X1", ylab="X2", asp=1)
grid()
# define some vectors
a=c(4,2)
b=c(1,3)
# plot the vectors
vectors(b, labels="b", pos.lab=4, frac.lab=.5, col="green")
vectors(a, labels="a", pos.lab=4, frac.lab=.5)
vectors(a+b, labels="a+b", pos.lab=4, frac.lab=.5, col="red")
# vector a+b starting from a is equal to b.
vectors(a+b, labels="b", pos.lab=4, frac.lab=.5, origin=a, col="green")