2012-06-04 21 views
10

के साथ एक समन्वय प्रणाली में वैक्टर प्लॉटिंग मैं कार्टेशियन विमान में वैक्टरों की साजिश पर सलाह की तलाश में हूं। कार्य बिंदुओं (निर्देशांक) को प्लॉट करना है और फिर उन्हें किसी स्रोत बिंदु पर एक तीर से जोड़ने के लिए (0,0 कहें)। नीचे दी गई छवि को एक विचार देना चाहिए। मुझे रंगों और नामकरण वैक्टर/अंक के बारे में परवाह नहीं है, यह सिर्फ समन्वय विमान में तीरों की साजिश के बारे में है। मुझे यकीन है कि कुछ पुस्तकालय रैखिक बीजगणित वैक्टर और संचालन की साजिश के लिए आर (या पायथन) में मौजूद है।आर या पायथन

किसी भी पॉइंटर्स की सराहना की जाएगी!

vectors in a plane http://mathinsight.org/media/image/image/vector_2d_add.png

+9

"किसी भी संकेत दिए गए सराहना की जाएगी" * कराहना * – Spacedman

उत्तर

13

या आप आर

में
plot(c(0,1),c(0,1)) 
arrows(0,0,1,1) 
+0

दिलचस्प। क्या तीर पर कुछ आंख कैंडी जोड़ना संभव होगा? (मोटाई, रंग, तीरहेड-शैली, डैश ...) – heltonbiker

+1

@heltonbiker 'तीर' देखें। यह कहता है 'कॉल', 'lty' और' lwd' स्वीकार किए जाते हैं। – Gregor

+0

इसके अलावा, अगर आप अपने लेबल में फैंसी बनना चाहते हैं, तो tikzDevice पैकेज देखें। – Gregor

0

कार्रवाई का सबसे स्पष्ट पाठ्यक्रम अजगर के matplotlib पैकेज है, जो की साजिश रचने सुविधाओं की एक बहुत है उपयोग करने के लिए किया जाएगा।

विशेष रूप से, आप रिवर्स-इंजीनियर this example करना चाहते हैं।

अधिक परिणाम प्राप्त करने का एक और तरीका, अधिक कलात्मक और कम कार्टेशियन तरीके से, rsvg का उपयोग करके एसवीजी बनाना और प्रस्तुत करना होगा। मैंने कभी कोशिश नहीं की है, लेकिन एसवीजी को तीर-सिर के लिए मूल समर्थन होना चाहिए। इसके अलावा, एसवीजी फ़ाइलों को आवश्यकतानुसार इंकस्केप जैसे ड्राइंग प्रोग्राम्स में संपादित किया जा सकता है।

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 समारोह का उपयोग कर सकते है अगर आप = 3 arrows कॉल करने के लिए LWD जोड़ने यह थोड़ा बेहतर दिखेगा। 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])))) 

enter image description here

कृपया ध्यान दें expression कॉल अंदर list समारोह एक plotmath list -call, नियमित रूप से आर list की तुलना में अलग बस के रूप में plotmath- paste नियमित paste तुलना में अलग है है। यह पैरेंट-फ्रेम में अपने तर्क का मूल्यांकन करने का कोई प्रयास नहीं करता है। इसके लिए bquote या substitute की आवश्यकता होगी और शायद "आंतरिक" अभिव्यक्तियों को संसाधित करने के लिए sapply का उपयोग करने की आवश्यकता होगी।

+0

धन्यवाद, यही वह है जिसे मैं ढूंढ रहा था! – sim

+0

मुझे लगा कि लेबलिंग की अभिव्यक्ति वेक्टर विधि जोड़ना उपयोगी होगा। चेक आउट करें? प्लॉटमाथ जहां आपको सीखना चाहिए कि प्लॉटमाथ 'सूची' फ़ंक्शन आर 'सूची' फ़ंक्शन के समान नहीं है। यह मुख्य 'पेस्ट' फ़ंक्शन के साथ-साथ प्लॉटमाथ 'पेस्ट' फ़ंक्शन के बारे में भी सच है। साजिशिक परिचालन के विपरीत प्लॉटमाथ 'सूची' शाब्दिक अल्पविरामों के लिए अभिव्यक्ति के अंदर अल्पविरामों को बदलता है। –

1

कुछ यादृच्छिक परिमाण 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")