2011-01-27 14 views
6

के साथ प्लॉटिंग तीर मेरे पास सिमुलेशन में उत्पन्न डेटा है। ,gnuplot

1990/01/01 99 
1990/01/02 92.7 
1990/01/03 100.3 
1990/01/04 44.2 
1990/01/05 71.23 
... 
2100/01/01 98.25 

मैं एक चार्ट (तुच्छता) बना सकते हैं बस (लंबी संस्करणीकृत) आदेश जारी करके: उत्पन्न डेटा फ़ाइल कुछ इस तरह दिखता

plot "simulation.dat" using 1:2 with line 

मैं एक तीसरे स्तंभ जोड़ना चाहते हैं जो तीर जानकारी जोड़ देगा। तीसरे स्तंभ के लिए एन्कोडिंग के रूप में निम्नानुसार होगा:

  • 0 => कोई तीर है कि एक्स अक्ष मूल्य के लिए तैयार हो
  • 1 => एक ऊपर की ओर इशारा करते तीर एक्स अक्ष मूल्य के लिए तैयार हो
  • 2 => एक नीचे तीर एक्स अक्ष मूल्य

मैं सिर्फ gnuplot जानने के लिए शुरू कर रहा हूँ के लिए तैयार हो, और कैसे मैं पहली बार भूखंड पर तीर बनाने के लिए उपयोग कर सकते हैं gnuplot में मदद की सराहना करेंगे?

+0

हाय, मुझे लगता है कि मुझे आपका gnuplot प्रश्न काम कर रहा है (कम से कम लिनक्स पर) मैंने अपना जवाब अपडेट किया। – Tom

उत्तर

3

मुझे नहीं लगता कि तीसरे कॉलम के आधार पर एक ही समय में आपके सभी तीरों को बनाने का एक स्वचालित तरीका है। आप प्रत्येक तीर है कि आप चाहते हैं के लिए निम्नलिखित को निष्पादित करना होगा:

set arrow xval1,yval1 to xval2,yval2 

तुम भी रिश्तेदार तीर

set arrow xval1,yval1 rto 1,0 

उपयोग कर सकते हैं यह करने के लिए xval1 से एक क्षैतिज तीर yval1 आकर्षित करेगा, (xval1 +1) , yval1

वहाँ plenty of options associated with the set arrow command हैं:

3

आप तीर सिर नहीं करना चाहता था, तो आप आवेगों शैली (आवेगों के साथ नहीं बल्कि लाइनों के साथ की तुलना में) की कोशिश कर सकते (यदि आप अभी भी शीर्ष पर लाइन चाहते हैं तो आप दो बार प्लॉट कर सकते हैं)।

यदि आप वास्तव में तीर के सिर चाहते हैं तो निम्नलिखित मदद कर सकते हैं: यह प्लॉट में लंबवत तीर जोड़ने के लिए लूप (या प्रकार) के लिए उपयोग करता है।

Gnuplot script, for loop within or adding to existing plot

विशेष रूप

:

count = count+1 
#save the count to count.gp 
system 'echo '.count.' > count.gp' 
#load the simloop shell 
system "./simloop.sh" 

#draw the arrow 
load 'draw_arrow.gp' 

if(count<max) reread 

तब कि इतने

#!/bin/bash 

#read the count 
count=$(awk -F, '{print $1}' count.gp) 
#read the file 
xcoord=$(awk -v count=$count -F, 'BEGIN{FS=" ";}{ if(NR==count) print $1}' simulation.dat) 
ycoord=$(awk -v count=$count -F, 'BEGIN{FS=" "}{ if(NR==count) print $2}' simulation.dat) 
dir=$(awk -v count=$count -F, 'BEGIN{FS=" "}{ if(NR==count) print $3}' simulation.dat) 

#choose the direction of the arrow 
if [ \"$dir\" == \"0\" ]; then 
    echo '' > draw_arrow.gp 
fi 

if [ \"$dir\" == \"1\" ]; then 
    echo 'set arrow from ' $xcoord' ,0 to '$xcoord','$ycoord' head' > draw_arrow.gp 
fi 

if [ \"$dir\" == \"2\" ]; then 
echo 'set arrow from '$xcoord',0 to '$xcoord','$ycoord' backhead' > draw_arrow.gp 
fi 
तरह दिखता है एक simloop.sh फ़ाइल बनाने:

एक फ़ाइल simloop.gp जो ऐसा दिखाई देता बनाने

फिर ऐसा लगता है कि एक simulation.gp फ़ाइल बनाएं इसलिए जैसे mething:

count = 0; 
max = 5; 
load "simloop.gp" 
set yrange[0:*] 
plot "simulation.dat" u 1:2 w l 

सुनिश्चित करें खोल फ़ाइल निष्पादन योग्य अनुमतियों (chmod + WRX simloop है।श), gnuplot लोड और टाइप

load "./simulation.gp" 

यह डेटा फ़ाइल

1 99 0 
2 92.7 1 
3 100.3 2 
4 44.2 0 
5 71.23 1 

साथ मेरे लिए काम किया (परीक्षण के लिए मैं स्वरूपण तुम भी बिना इसे वापस डाल करने के लिए सक्षम होना चाहिए समय से छुटकारा मिला ज्यादा मुसीबत)

तब मैं इस ग्राफ मिला:। enter image description here

कौन सा मुझे लगता है कि कमोबेश आप क्या चाहते हैं।

+0

अच्छी तरह से किया गया, मैं हमेशा अन्य कोड से gnuplot को कॉल करता हूं इसलिए मुझे एहसास नहीं हुआ कि ऐसी स्क्रिप्टफ़ाइल बहुत जटिल नहीं हैं। हालांकि, मुझे लगता है कि यदि आप इनपुटफाइल स्वयं उत्पन्न करते हैं तो आपके कोड में एक ही समय में तीरों को साजिश करना सबसे आसान हो सकता है। यदि यह समाधान सही नहीं है! इनपुट के लिए – Martin

+0

धन्यवाद। हालांकि, आपका दृष्टिकोण मेरे लिए थोड़ा जटिल है (मैं sedok नहीं है और बहुत अच्छी तरह से awk;) – oompahloompah

1

हालांकि सवाल काफी पुराना है, मेरा जवाब यहां है। ,

set style arrow 1 backhead 
set style arrow 2 head 
set yrange[0:*] 
set xdata time 
set timefmt "%Y/%m/%d" 
plot "simulation.dat" using 1:2 with line,\ 
    "" using 1:2:(0):(-$2):($3 == 0 ? 1/0 : $3) with vectors arrowstyle variable 

यह एक स्तंभ के मूल्य 1/0 है बिंदु अपरिभाषित के रूप में माना जाता है और छोड़ दिया जाता है:

एक vectors अंकन शैली, किसी स्तंभ के मूल्य के आधार पर चर arrowstyles उपयोग कर सकते हैं जो उपयोग कर सकते हैं।