2008-10-22 11 views
5

के बाद फ़ाइल में प्रत्येक पंक्ति को कैसे प्लॉट करें मेरे पास 3 कॉलम डेटाफाइल है और मैं इसे प्लॉट करने के लिए स्प्लॉट का उपयोग करना चाहता था। लेकिन मैं जो चाहता हूं वह है कि gnuplot पहली पंक्ति (कुछ रंगों में, लाल कहें) प्लॉट करता है और फिर 0.3 सेकंड कहने के लिए रुक जाता है और फिर अगली पंक्ति (अन्य रंग में, लाल रंग में नहीं, हरे रंग में कहने के लिए) पर आगे बढ़ता है, इसके लिए रुक जाता है 0.3 सेकंड और फिर अगली पंक्ति में आगे बढ़ता है .... तो इतने पर आगे।ग्नुपलॉट: कुछ पॉज़

किसी भी मदद की सराहना की जाएगी। पहले से

धन्यवाद

सादर पंकज

उत्तर

2

आप एक एनीमेशन का उत्पादन करना चाहते हैं, तो आप बेहतर यह (एम प्लेयर की तरह) के लिए विशेष उपकरणों का उपयोग करें।

सभी स्रोत छवियों को तैयार करने के लिए gnuplot का उपयोग करें (पहली पंक्ति एकल प्लॉट के साथ, दूसरा - दो पंक्तियों के साथ, आदि), फिर mplayer का उपयोग करें या छवि फ़ाइलों से बाहर एवी या एनिमेटेड जीआईएफ का उत्पादन करने के लिए (छविमैजिक से) कनवर्ट करें।

आप इनपुट फ़ाइल की आंशिक प्रतियां उत्पन्न करने के लिए निम्न शेल स्निपेट का उपयोग कर सकते हैं, प्रत्येक पंक्तियों की बढ़ती संख्या के साथ।

file="your input file.dat" 
lines=$(wc -l $file) 
i=1 
while [ $i -le $lines ] ; do 
    head -${i} ${file} > ${file%.dat}-${i}lines.dat 
done 

इस somefile.dat को देखते हुए फ़ाइलों का उत्पादन करेगा "somefile-1lines.dat", "somefile-2lines.dat", आदि तो फिर तुम उपयोग कर सकते हैं:

for f in *lines.dat ; do 
    gnuplot ... $f 
done 

उन सब में प्लॉट करने के लिए अनुक्रम।

यदि मेरी धारणा गलत है और आप वास्तव में यह रोकना चाहते हैं, तो आप चीजों को सेट करने का प्रयास कर सकते हैं ताकि gnuplot stdin से डेटा प्राप्त कर सके, और फिर इस विज्ञान का उपयोग करें (इसे नाम दें-input.sh) प्रत्येक पंक्ति के बाद रुक जाता है के साथ पाइप इनपुट फ़ाइल:

#!/bin/bash 
while read l ; do 
    echo "$l" 
    sleep 1 
done 

तो इस तरह यह आह्वान:

(pause-input.sh | gnuplot ...) < somefile.dat 
2

अच्छा प्रयास लेकिन ... यह डेटा फ़ाइल में लाइनों की संख्या के रूप में कई फ़ाइलों पैदा करेगा । यह मेरे लिए बदसूरत लग रहा है।

हम चाहते उस में आदेशों के साथ gnuplot स्क्रिप्ट बनाने के लिए एक खोल/पर्ल स्क्रिप्ट लिख सकते हैं:

splot x1 y1 z1 
pause 1 
replot x2 y2 z2 
pause 1 
replot x3 y3 z3 
pause 1 
replot x4 y4 z4 

जहां xi, यी, जि = ith लाइन नंबर के लिए डेटा फ़ाइल में समन्वय करता है। रोकें 1 इसे एक सेकंड के लिए रोक देगा।

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

0

प्लॉटफाइल उदाहरण बनाते हैं। 'Myplotfile.plt'। और इसमें उन सभी आदेशों को डालें जिन्हें आप आमतौर पर अपने ग्राफ को साकार करने के लिए gnuplot में टाइप करेंगे।

तो बस अपने भूखंड फ़ाइल जहां आप इसे रोकना चाहते हैं, लाइन

!sleep $Number_of_Seconds_to_Pause

जोड़ सकते हैं और साथ

gnuplot myplotfile.plt

(plotfile का विस्तार नहीं है टर्मिनल से इसे चलाने

: बात, यदि आप एक विंडोज या मैक बॉक्स पर हैं तो आप .txt उपयोग करने के लिए) plotfile की

उदाहरण पसंद आ सकते हैं

set title 'x squared' 
plot x**2 title '' 
!sleep 5 
set title 'x cubed' 
plot x**3 title '' 
!sleep 5
1

प्रत्येक पंक्ति एक समय में (बीच में थोड़ा विराम के साथ) ड्राइंग करने का प्रभाव संभवतः gnuplot के वर्तमान संस्करण के साथ आसान है (यह प्रश्न पोस्ट होने के 4 वर्षों से अधिक हो गया है)।

आप इस प्रकार का for -loop, और every कीवर्ड, उपयोग कर सकते हैं:

# Find out the number of lines in the data somehow, 
# for example like this: 
num_lines="`cat my_datafile.d | wc -l`" 

# Plot the first line in the data-file: 
plot './my_datafile.d' every 1::0::0 

# For the remaining lines: 
do for [line_index = 1:num_lines-1] { 
    pause 0.3 
    # Replot (from the same datafile) each line 
    # in the data file from the first one up to 
    # the current line_index 
    replot '' every 1::0::line_index 
} 

every 1::0::line_index हिस्सा gnuplot निर्देश देता है - प्रत्येक पाश में - हर लाइन (1) में आकर्षित करने के लिए लूप वैरिएबल line_index के वर्तमान मूल्य तक पहले (डेटा 0) का डेटा।

gnuplot> help every 
The `every` keyword allows a periodic sampling of a data set to be plotted. 
[...] 

Syntax: 
    plot 'file' every {<point_incr>} 
         {:{<block_incr>} 
         {:{<start_point>} 
          {:{<start_block>} 
          {:{<end_point>} 
           {:<end_block>}}}}} 
[...] 

संस्करण की जानकारी:

$ gnuplot --version 
gnuplot 4.6 patchlevel 0 
क्या हम प्रयोग कर रहे हैं <point_incr>, <start_point> और <end_point> gnuplot की मदद पाठ में निर्दिष्ट है
संबंधित मुद्दे