2012-07-16 14 views
8

के साथ अपने शीर्ष लेख को फोन करके कॉलम साजिश मैं इस प्रारूप के फ़ाइल है:gnuplot

x y1 y2 y3 ei1 ei2 ei3 es1 es2 es3 
1 4 5 4 7 7 2 4 7 7 
2 7 3 3 3 8 3 3 3 8 
3 2 1 4 4 9 6 4 4 9 

मैं क्या निम्न आदेश देना होगा

plot "filename" using 1:2:5:8 with yerrorbars 

के समान भूखंडों का उत्पादन करना चाहते हैं लेकिन स्तंभों का उपयोग हेडर (x, y1, ei1 और es1) उन्हें फोन करने के लिए। यह कैसे किया जा सकता है?

gnuplot पुस्तिका (using आदेश का दस्तावेजीकरण) के पृष्ठ 84 पर लिखा है: जब मैं उन्हें मैंने कोशिश की

Height Weight Age 
val1 val1 val1 
... ... ... 

उसके बाद निम्न साजिश आदेश सभी बराबर हैं

plot ’datafile’ using 3:1, ’’ using 3:2 

plot ’datafile’ using (column("Age")):(column(1)), \ 
’’ using (column("Age")):(column(2)) 

plot ’datafile’ using "Age":"Height", ’’ using "Age":"Weight" 

हालांकि केवल पंक्ति बनाम पंक्ति बनाम खुद को मिला।

+3

'साजिश" फ़ाइल नाम "1 का उपयोग: 2: 5: 8 yerrorbars' और' साजिश "फ़ाइल नाम" का उपयोग कर "एक्स" के साथ: "y1": "ei1": "ES1" yerrorbars' के साथ यहाँ समान ही परिणाम। Gnuplot का कौन सा संस्करण चला रहे हैं, मैं 4.6 Patchlevel 0. – Thor

+0

संस्करण 4.4 Patchlevel 3 उबंटू के साथ भेज दिया gnuplot में परीक्षण किया गया। क्या यह बहुत पुराना है? –

+1

हां, आपको इस सुविधा के लिए संस्करण 4.6 या बाद की आवश्यकता है। – Thor

उत्तर

5

gnuplot 4.4 बनाम gnuplot 4.6 (वर्तमान स्थिर रिलीज) के लिए प्रलेखन पर एक त्वरित नज़र डालने पर, ऐसा प्रतीत होता है कि आप जिस सुविधा का उपयोग करने का प्रयास कर रहे हैं वह शायद gnuplot 4.5 में प्रस्तुत किया गया था (विषम संख्या विकास शाखाएं हैं - जब वे स्थिर माना जाता है, वे एक भी संख्या में वृद्धि हो जाती है)। एक ही तरीका है यह पूरा करने के बारे में सोच सकते हैं कि कुछ अन्य भाषा है जो स्तंभ संख्या (stdout के लिए) रिटर्न में एक साधारण स्क्रिप्ट लिखने के लिए है। यहाँ एक सरल अजगर का उपयोग कर, हालांकि मैं सकारात्मक आप awk में ऐसा कर सकता है कि अगर आप एक सब POSIX वातावरण में रहने के लिए चाहते थे हूँ उदाहरण है:

#python indexing is 0 based, gnuplot datafile indexing 1 based 
COL_AGE=`python -c 'print(open("datafile").readline().split().index("AGE")+1)'` 
COL_HEIGHT=`python -c 'print(open("datafile").readline().split().index("HEIGHT")+1)'` 
plot "datafile" u COL_AGE:COL_HEIGHT 

इस छोटे स्क्रिप्ट कुछ भी कल्पना नहीं करता है (यह मान लिया गया है कॉलम हेडर उदाहरण के लिए पहली पंक्ति) पर हैं, लेकिन अजगर की शक्ति का उपयोग, यह बहुत आसान होगा स्क्रिप्ट को और विस्तार करने के लिए: जो स्तंभ पता लगाने के लिए python script.py datafile AGE:

#!/usr/bin/env python 
import sys 
with open(sys.argv[1]) as f 
    for line in f: 
     if (line.strip()): 
      print (line.split().index(sys.argv[2])+1) 
      sys.exit(0) 

अब आप के रूप में इस स्क्रिप्ट कॉल कर सकते हैं "एजीई" अंदर है। अगर कोई त्रुटि "एजीई" किसी कॉलम में नहीं है तो यह एक त्रुटि है।