2011-02-12 7 views
12

मैं एक एकल .plt फ़ाइल दोनों डेटा और gnuplot आदेशों को संग्रहीत करना चाहता हूं। मेरा डेटाgnuplot में एक ही मानक इनपुट डेटा से कई भूखंड कैसे बनाएं?

# x1 y1 x2 y2 
    1 2 3 4 
    5 6 7 8 

और दो भूखंडों से मेल खाता है: (x1, y1) और (x2, y2)।

मैं जानता हूँ कि मैं "-" की तरह उपयोग कर सकते हैं:

plot "-" using 1:2 
# x1 y1 x2 y2 
    1 2 3 4 
    5 6 7 8 
e 

लेकिन वह केवल एक भूखंड, जैसे कि, (x1, y1) उत्पन्न होगा। मैं की तरह

plot "-" using 1:2, "-" using 3:4 
# x1 y1 x2 y2 
    1 2 3 4 
    5 6 7 8 
e 

कुछ करने के लिए कोशिश कर रहा हूँ लेकिन स्पष्ट रूप से है कि चूंकि gnuplot दूसरा "-" के लिए मानक इनपुट से डेटा का एक नया सेट की उम्मीद है काम नहीं करता।

नोट्स:

  1. मैं डेटा की शैली नहीं बदल सकते। यह चार कॉलम में आता है।
  2. ऐसा लगता है कि मैं इसे reread के साथ कर सकता हूं लेकिन इसके लिए दो फाइलों की आवश्यकता है। मैं वास्तव में केवल एक फ़ाइल चाहता हूँ।

उत्तर

7

आप जिस तरह के बारे में कुछ को संशोधित किए बिना ऐसा नहीं कर सकते वहाँ देखने के लिए चाहते हो सकता है: वहाँ भी इस सवाल का एक समानता हो रहा है आप डेटा इनपुट करते हैं। मानक इनपुट के माध्यम से gnuplot डेटा को खिलाते समय, यह अपेक्षा करता है कि एकाधिक डेटा सेटों को उनके बीच दो रिक्त रेखाओं के साथ सीमित किया जाए, या लगातार लाइनों पर अंतःस्थापित किया जा सके। विकल्प हैं:

  • अलग साजिश आदेश में फीड दो डेटा सेट पूरी तरह।

  • बदलें फ़ाइल स्वरूप ताकि डेटा सेट उन दोनों के बीच रिक्त लाइनों है, तो उन सब सूचकांक साथ के संदर्भ हैं।

  • बदलें फ़ाइल स्वरूप ताकि बारी लाइनों अलग डेटा सेट का प्रतिनिधित्व करते हैं, तो उन सब को हर साथ के संदर्भ हैं।

  • एक फ़ाइल, दूसरे में अंकन स्क्रिप्ट में डेटा रखो, और फिर एक बार से अधिक डेटा फ़ाइल का संदर्भ अलग खंड हर बार उपयोग करने के साथ।

हर और सूचकांक आदेशों How do I plot several data sets in a single file पर शुरू करने के लिए एक परिचय नहीं है? इस तरह की चीज के लिए gnuplot में निर्मित एकमात्र सुविधाएं हैं, और न ही आप जो भी पूछ रहे थे वह न ही करता है। यह अच्छा है कि आपने पहले ही डेटा स्वरूपण को संशोधित कर दिया है, क्योंकि यह कभी भी काम करने वाला नहीं था जैसा कि आप मूल रूप से आशा करते थे।

+0

धन्यवाद। जानना अच्छा है कि क्या कर सकता है और क्या नहीं किया जा सकता है (मेरी इच्छा है कि यह किया जा सकता है)। हालांकि मैंने अपनी फाइल बदल दी है, फिर भी सी ++ कोड मूल प्रारूप को तेज़ी से उत्पन्न करेगा और मुझे यह और पसंद आया। वैसे भी, केवल एक त्वरित सवाल: जाहिर है, मैं '" - "' और 'हर 'को गठबंधन नहीं कर सकता, है ना? – Mahdiyar

+0

क्या आप कृपया उदाहरण दे सकते हैं कि यह कैसे करें? gnuplot अंत तक (पहली साजिश करते समय) पढ़ता है, इससे कोई फर्क नहीं पड़ता कि मैं क्या करता हूं। –

4

मुझे यकीन है कि आप कितना फ़ाइल को संपादित कर सकते हैं नहीं कर रहा हूँ, लेकिन tidiest तरीका शायद एक खोल स्क्रिप्ट/बैच लिपि में पूरी बात डाल करने के लिए है (यदि आप लिनक्स या खिड़कियों पर कर रहे हैं?)

लिनक्स पर मैं इस

#!/bin/bash 

#put my data in a file 
echo " 
# x1 y1 x2 y2 
    1 2 3 4 
    5 6 7 8 
" > my_dat.dat 

#launch gnuplot 
gnuplot<<EOF 
#gnuplot commands here 
set output "test.ps" 
set term postscript 

plot "my_dat.dat" u 1:2, \ 
    "my_dat.dat" u 3:4 

set term pop 
set output 

EOF 

# cleanup 
rm my_dat.dat 

की तरह कुछ तो मैं + chmod फ़ाइल मैं में ऊपर बताए गए आदेशों डाल Wrx और चला सकता हूँ।

नोट:

gnuplot stdin, how to plot two lines?

तो तुम भी

+0

धन्यवाद। हाँ मैं लिनक्स पर हूं। दरअसल मैं इसे उत्पन्न करने वाले सी ++ कोड को संशोधित करके डेटा स्वरूपित करने के तरीके को बदलने में कामयाब रहा। तो मेरी समस्या अब चली गई है। लेकिन फिर भी मैं उत्सुक हूं कि कोई ऐसा कैसे कर सकता है कि मैं एक ही फ़ाइल के साथ साजिश देखूंगा। उपरोक्त प्रारूप में और '$ gnuplot file.plt' जारी करना। – Mahdiyar

+0

@ महदियार हां, मैं भी इसके बारे में उत्सुक हूं। स्क्रिप्टिंग के साथ gnuplot का उपयोग करना मुझे लगता है कि सामान्य तरीका है (आप अपने सी ++ प्रोग्राम को खोल से भी कॉल कर सकते हैं, जिससे पूरी चीज 1 लाइन के साथ काम कर सकती है), देखें - http://t16web.lanl.gov/Kawano/gnuplot/intro/working इस पर और अधिक के लिए। – Tom

+2

मुझे यह खोल स्क्रिप्ट विधि पसंद है, क्योंकि मैं बस अपने ऐप को एक प्लॉट करने योग्य फ़ाइल उत्पन्न करना चाहता हूं। 'TmpFile = \' tempfile \ '' और फिर अपने भूखंड आदेश उपयोग में 'साजिश" $ tmpFile "1: फाइल सिस्टम को साफ उपयोग बैश tempfile आदेश रखने के लिए 2 ...' –

1

मैं जानता हूँ कि यह एक पुरानी पोस्ट है, लेकिन मैं किसी और मामले में किसी को एक और रणनीति को इंगित करना चाहते हैं अभी भी इस समस्या के साथ संघर्ष:

तुम भी तरह, दो बार अपने साजिश रचने कमान और इनपुट डेटा का उपयोग कर सकता:

plot "-" using 1:2, "-" using 3:4 
# 1 2 3 4 
    5 6 7 8 
    e 
    1 2 3 4 
    5 6 7 8 
    e 

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

मेरे अनुभव में कोड की राशि अपनी स्क्रिप्ट, जो एक बार की तुलना में यह अधिक पाइप के लिए आवश्यक है में डेटा बफ़र होना आवश्यक है, बहुत कम है। gp5.0 के बाद से

2

नया विकल्प (भी help inline data देखें):

$dataset << EOD 
1 2 3 4 
5 6 7 8 
EOD 

plot $dataset using 1:2, $dataset using 3:4 
संबंधित मुद्दे