2012-05-29 12 views
6

मैं gnuplot के लिए बिल्कुल नया हूं और googling के बाद एक समाधान समाधान नहीं मिला।gnuplot: पंक्ति और कॉलम नामों के साथ मैट्रिक्स (हीटमैप) का लेबल एक्स और वाई-अक्ष

मैं एक डेटा मैट्रिक्स कुछ इस तरह लग रही है:

A B C D E 
A 0 2 3 4 5 
B 6 0 8 9 0 
C 1 2 0 4 5 
D 6 7 8 0 0 
E 1 2 3 4 0 

मैं x- अक्ष के साथ एई लेबल और y- अक्ष के साथ एई लेबल के साथ, ऐसा करने के लिए plot 'result.csv' matrix with image साथ एक हीटमैप की साजिश रचने चाहते हैं क्या । इस मैट्रिक्स में हमेशा एक ही आकार नहीं होता है, लेकिन पंक्ति की संख्या हमेशा कोल्स की संख्या के बराबर होती है और इसे हमेशा लेबल किया जाता है।

क्या कोई इस से मेरी सहायता कर सकता है? मुझे लगता है कि मुझे using कमांड का उपयोग करना है, लेकिन अब तक यह मेरे लिए पूर्ण वूडू जैसा प्रतीत होता है ...

बहुत बहुत धन्यवाद!

उत्तर

11

यह वास्तव में एक डूसी है और मैं इसे कुछ * निक्स शैल जादू के बिना नहीं कर सकता।

सबसे पहले, हम प्राप्त करना चाहते हैं एक्स टिक लेबल और y टिक लेबल:

XTICS="`awk 'BEGIN{getline}{printf "%s ",$1}' test.dat`" 
YTICS="`head -1 test.dat`" 

इस बिंदु पर, XTICS स्ट्रिंग 'एफ जी एच मैं जम्मू "है और YTICS स्ट्रिंग' ए बी सी डी ई 'है।

अब, हम यात्रा से xtics सेट करना चाहते हैं:

set for [i=1:words(XTICS)] xtics (word(XTICS,i) i-1) 
set for [i=1:words(YTICS)] ytics (word(YTICS,i) i-1) 

हम 2 gnuplot builtin कार्य (word और words) का उपयोग किया है। words(string) बताता है कि दिए गए स्ट्रिंग में कितने शब्द हैं (एक शब्द रिक्त स्थान से अलग वर्ण अनुक्रम है)। word(string,n) स्ट्रिंग में n'th शब्द देता है।

अब, हम अपने datafile प्लॉट कर सकते हैं ... केवल समस्या यह है कि matrix अपने datafile में सभी पंक्तियों और स्तंभों का उपयोग करना चाहता है। आप every कीवर्ड का उपयोग करके वास्तव में पढ़ने वाली पंक्तियों/स्तंभों को काट सकते हैं, लेकिन मुझे नहीं पता कि मैट्रिक्स फ़ाइलों पर इसे कैसे करना है - और मुझे लगता है कि केवल खोल उपयोगिताओं पर निर्भर रहना संभव है (awk और sed)

plot "<awk '{$1=\"\"}1' test.dat | sed '1 d'" matrix w image 
#######^ replace the first field with nothing 
##################################^delete first line 

और अब अपने भूखंड (उम्मीद) जिस तरह से आप यह करना चाहते हैं लग रहा है।

यह भी ध्यान दें कि चूंकि हमने पुनरावृत्ति का उपयोग किया है, इसलिए यह स्क्रिप्ट केवल gnuplot 4.3 या उच्चतर में काम करेगी - चूंकि वर्तमान स्थिर 4.6 है, उम्मीद है कि यह ठीक है।

+0

आप, सर से समझ में आ गया, दिन के मेरे हीरो हैं। आपका बहुत बहुत धन्यवाद! – Eekhoorn

+0

@zenbomb - कोई समस्या नहीं। यह वास्तव में मेरे लिए इसे समझने की कोशिश करने के लिए एक मजेदार खेल था। मैं अक्सर 'मैट्रिक्स' डेटाफाइल के साथ काम नहीं करता, इसलिए मुझे gnuplot के बारे में कुछ नया सीखने का अच्छा मौका था। – mgilson

+0

बिना एक्सकिक्स एक्सटीआईसीएस: एक्सटीआईसीएस = "' कट-डी '' -एफ 1 test.dat | xargs '"; स्तंभों को पंक्ति में बदलने के लिए xargs का दुरुपयोग। – Manwe

3

ठीक है, इस सवाल पुराना है, लेकिन वहाँ एक बहुत ही आसान तरीका पहले से ही gnuplot में लागू है:

plot 'result.csv' matrix rowheaders columnheaders with image 

http://gnuplot.sourceforge.net/demo/heatmaps.html

+1

अतिरिक्त: विकल्प 'पंक्ति शीर्षलेख' और 'कॉलमहेडर' संस्करण 5.0 पैचलेवल 0 के बाद उपलब्ध हैं। – Christoph

संबंधित मुद्दे