मैं एक डेटा सेट को 3Dplot करना चाहता हूं, और एक अलग डेटासेट को एक संयुक्त प्लॉट में समोच्च प्लॉट करना चाहता हूं। (समोच्च डेटासेट रुचि रखने वालों के लिए 3Dplot के ग्रेडिएंट से संबंधित है)। अनुकूलित कोड यहां से ठीक काम करता है, एक बात को छोड़कर: अगर मैं अपने 3D प्लॉट को स्केल करने के लिए set zrange का उपयोग करता हूं, तो कंट्रोवर्सी गायब हो जाती है। Autoranged 3Dplot अच्छा नहीं दिखता है, हालाँकि तब कंट्रोवर्सी ठीक दिखाई देती है, इसलिए मैं एक कस्टम रेंज लागू करना चाहता हूँ। मुझे संदेह है कि समस्या का कुछ संबंध है, जो कि समोच्चों के साथ भी हो रहा है, इस तरह से कोई समोच्च नहीं छोड़ा जाता है। लेकिन मुझे यह देखने के लिए Gnuplot के साथ पर्याप्त अनुभव नहीं हुआ है कि क्या यह वास्तव में मामला है, या समस्या को कैसे हल किया जाए।

यह कोड...

    reset
    set ztics 5
    #set zrange [10 : 25] #nowriteback
    set view 135,60
    set contour base #surface
    set cntrlabel font ",7"
    set datafile missing "NaN"
    set clabel
    
    set cntrparam levels discrete 0.3, 0.4, 0.6, 1.0, 1.5
    splot 'out011_Io.txt' nonuniform matrix with lines notitle nocontour, \
    'out011_FlxN.txt' nonuniform matrix with lines title "{/Symbol F}_{N}" enhanced nosurface

...इस प्लॉट को बनाता है: ओके कंट्रोवर्सी के साथ अत्यधिक चपटा 3डी प्लॉट ,

Zrange को सक्रिय करते समय...

reset
set ztics 5
set zrange [10 : 25] #nowriteback
set view 135,60
set contour base #surface
set cntrlabel font ",7"
set datafile missing "NaN"
set clabel

set cntrparam levels discrete 0.3, 0.4, 0.6, 1.0, 1.5
splot 'out011_Io.txt' nonuniform matrix with lines notitle nocontour, \
'out011_FlxN.txt' nonuniform matrix with lines title "{/Symbol F}_{N}" enhanced nosurface

...इस प्लॉट को बनाता है: अच्छा 3D प्लॉट, कोई दृश्यमान आकृति नहीं।

enter image description here

मूल डेटा यहां पाया जा सकता है: out011_FlxN.txtऔर out011_Io.txt

अधिक जानकारों के सुझावों की अत्यधिक सराहना की जाती है।

1
ttemsk 14 जुलाई 2020, 14:02
मैं आपके डेटा और आपके दिए गए कोड के साथ पहले ग्राफ को पूरी तरह से पुन: पेश नहीं कर सकता। मुझे पहले ग्राफ में कोई समोच्च नहीं दिख रहा है। आप gnuplot के किस संस्करण का उपयोग करते हैं?
 – 
theozh
16 जुलाई 2020, 11:06
out011_FlxN.txt के आपके डेटा मान लगभग 10 से 180 की सीमा में हैं। gnuplot 0.3 से 1.5 के बीच के स्तरों के लिए समोच्च रेखाओं को कैसे प्लॉट करने में सक्षम होना चाहिए? आपके डेटा या आपके स्तरों के साथ कुछ भ्रमित होना चाहिए।
 – 
theozh
16 जुलाई 2020, 11:37
@theozh, जोस द्वारा सुझाए गए पहले हैक के लिए, आपके द्वारा संदर्भित डेटा 10 जोड़े गए नंबर के साथ है। मेरा मूल डेटा (बिना 10 जोड़े, यानी SHIFT इस्तेमाल किया गया वैरिएबल) में मिलता है लिंक.
 – 
ttemsk
16 जुलाई 2020, 11:50

2 जवाब

यदि आप help contour को चेक करते हैं, तो gnuplot कंटूर को प्लॉट करने के विकल्प प्रदान करता है

set contour {base | surface | both}

दुर्भाग्य से, आपके अनुरोध के अनुसार कस्टम स्तर पर नहीं। तो, वर्कअराउंड के लिए मेरा सुझाव निम्नलिखित होगा:

  1. डेटा और समोच्च को एक तालिका में प्लॉट करें, उदा। डेटाब्लॉक $Cont। इस डेटाब्लॉक में डेटा और समोच्च रेखाएं (आपके मामले में 5) और प्रत्येक उप-ब्लॉक को 2 खाली लाइनों से अलग किया जाएगा।
  2. कंटूर को अनसेट करें
  3. प्लॉट $Cont, लेकिन पहले ब्लॉक को छोड़कर। आपके मामले में index 1:5 के माध्यम से।

का स्पष्टीकरण:

for [i=1:LevelCount] $Cont u 1:2:(10):(column(-2)) index i w l lc var ti columnhead(3) 

कीटाइटल के रूप में columnhead(3) के साथ स्यूडोकॉलम (column(-2)) द्वारा निर्धारित चर रंग lc var का उपयोग करके निरंतर z-स्तर (10) पर $Cont के ब्लॉक 1 से 5 को प्लॉट करना। जाहिर है, आपके मामले में केवल 4 समोच्च रेखाएं हैं, यानी 0.3 पर कोई नहीं।

कोड:

### contour plot at custom level
reset session

set contour base
set cntrparam levels discrete 0.3, 0.4, 0.6, 1.0, 1.5
set table $Cont
    splot "out011_FlxN2.txt" nonuniform matrix
unset table
unset contour
 
set key at screen 0.16, screen 1 title "{/Symbol F}_{N}"
set view 135,60
set xyplane relative 0
LevelCount = 5

splot "out011_Io.txt" nonuniform matrix w l notitle, \
      for [i=1:LevelCount] $Cont u 1:2:(10):(column(-2)) index i w l lc var ti columnhead(3) 
### end of code

परिणाम:

enter image description here

1
theozh 16 जुलाई 2020, 14:22

डेटाफ़ाइल्स सहित न्यूनतम उदाहरण के बिना, निश्चित रूप से उत्तर देना मुश्किल है, लेकिन ऐसा इसलिए हो सकता है क्योंकि आपकी दूसरी फ़ाइल में zrange के बाहर के मान हैं जिन्हें आप पहले वाले के लिए लागू करना चाहते हैं। जैसे, कोड:

set cntrparam levels discrete -.5,.5
set contour base
splot 10*(sin(x/3)*sin(y/3)+2), sin(x/3)*sin(y/3) nosurface

आकृतियाँ उत्पन्न करता है, लेकिन वहाँ भी यदि आप एक zrange निर्दिष्ट करते हैं जिसमें -0.5 और संभवतः 0.5 शामिल नहीं हैं, तो ये आकृतियाँ नहीं दिखाई जाती हैं। चूँकि splot के लिए कोई axes कीवर्ड नहीं है (plot के विपरीत), मेरी सर्वोत्तम जानकारी के लिए आपके पास दूसरी फ़ाइल में डेटा को श्रेणी में फ़िट करने के लिए तरकीबें बची हैं 1 के डेटा के। चूंकि पहली की सीमा [10:25] है और दूसरी [0.3:1.5] में से एक, 10 जोड़ना अच्छा है। लेकिन फिर आपको "हाथ से" कुंजी का उत्पादन करना होगा, अन्यथा समोच्चों को 10.3, 10.4,... लेबल किया जाएगा। यहाँ सही कोड है:

reset
set ztics 5
set zrange [10 : 25] #nowriteback
set view 135,60
set contour base #surface
set cntrlabel font ",7"
set datafile missing "NaN"
set clabel

NSURFACES=1 #change if plotting more surfaces
SHIFT=10
LEVELS="10.3, 10.4, 10.6, 11.0, 11.5"
set cntrparam levels discrete @LEVELS
set style line 100 lc rgb "white"
splot 'out011_Io.txt' nonuniform matrix with lines notitle nocontour, \
  'out011_FlxN.txt' nonuniform matrix using 1:2:($3+SHIFT) with lines notitle enhanced nosurface, \
  for [i=0:words(LEVELS)] 1/0 w l ls (i==0)?100:i+NSURFACES  title (i==0)?"{/Symbol F}_{N}":sprintf(("%.1f"),word(LEVELS,i)-SHIFT)

ध्यान दें:

  1. एक क्लीनर समाधान यह होगा कि दोनों पर stats का उपयोग करें और गणना करें कि हार्डसेटिंग 10 के बजाय दूसरी फ़ाइल में कौन सी ऑफसेट जोड़ी जानी चाहिए।
  2. संस्करण 5.2 से, आप 1/0 को क्लीनर keyentry कीवर्ड से बदल सकते हैं।
0
Joce 15 जुलाई 2020, 12:18
1
यह एक चतुर हैक है, बदसूरत है लेकिन वह करेगा जो आवश्यक है। इसका सुझाव देने के लिए धन्यवाद। मेरे पहले प्रयास में कोड ने रूपरेखा का निर्माण नहीं किया, हालाँकि, मैं मानता हूँ कि इसे करना चाहिए। मैं इस पर काम कर रहा हूं, लेकिन इस बीच, मेरी संख्यात्मक डेटा फ़ाइलें के रूप में पाई जाती हैं लिंक और लिंक
 – 
ttemsk
15 जुलाई 2020, 11:24
वह मेरी गलती थी: अब @LEVELS में set cntrparam का उपयोग करके gnuplot को कमांड का मूल्यांकन करने से पहले स्ट्रिंग को फ्लोट में बदलने से रोकें। रूपरेखा अब दिखानी चाहिए। बीटीडब्ल्यू, क्या आपने अपनी ग्रेडिएंट फ़ाइल को हर जगह 10 जोड़कर अपडेट किया है? प्लॉट कमांड का उपयोग करना बेहतर है, इसे जोड़ना (यह उत्तर में मेरी गलती थी), अगर आपकी फ़ाइल पूर्व-स्थानांतरित है तो SHIFT=0 का उपयोग करें।
 – 
Joce
15 जुलाई 2020, 12:19
यह काम करता है, बढ़िया, धन्यवाद! मुझे यह सुनिश्चित करने के लिए उपयोगकर्ता पुस्तिका में जाना होगा कि मैं उपयोग किए गए वाक्यविन्यास को समझता हूं। अर्थात् अब एक और मुद्दा है: समोच्च किंवदंती के रंग वास्तविक आकृति से मेल नहीं खाते हैं। मुझे जो प्लॉट मिला वह link जैसा है। कंटूर डेटा लिंक जैसा दिखता है, इसलिए वास्तव में कोई <0.3 मान नहीं हैं, और अंतरतम समोच्च <0.4 होना चाहिए जो कि भूखंड में हल्का-हरा लेकिन किंवदंती में लाल है। अगला <0.6 cntr प्लॉट में पीला है लेकिन लीजेंड में नारंगी है।
 – 
ttemsk
15 जुलाई 2020, 15:25
ऐसा लगता है कि मेरा Gnuplot v5.2 set cntparam level discrete स्टेटमेंट में निर्दिष्ट दाएं स्तर के लिए लाइनटाइप 4 का उपयोग करता है, जो डेटा-टू-बी-समोच्च में भी पाया जाता है। और यह set cntparam level discrete के बाएँ/शुरुआत की ओर कंट्रोवर्सी के लिए 5, 6, 7... का उपयोग करता है, जब तक कि डेटा-टू-बी-कॉन्टूर्ड में स्तर भी पाया जाता है। उपरोक्त के विपरीत, पौराणिक कथा में ग्नुप्लॉट लाइनटाइप 2, 3, 4 ... का उपयोग करता है, जो set cntparam level discrete के बाएं मान से शुरू होता है, चाहे डेटा में स्तर पाया जाता है या नहीं .
 – 
ttemsk
15 जुलाई 2020, 18:20
अगर मैं सत्यापित करता हूं कि set cntparam discrete में कोई स्तर नहीं है जो डेटा-टू-कॉन्टूर्ड में नहीं मिला है, और ...(i==0)?100:i+NSURFACES title (i==0)?"{/Symbol F}_{N}"... को ...(i==0)?100:NSURFACES+words(LEVELS)+3-i title (i==0)?"{/Symbol F}_{N}"... से बदल दें, तो लेजेंड सही ढंग से प्लॉट किया गया है। इंडेक्सिंग स्कीम रिवर्स इंजीनियर यहाँ सॉर्ट-ऑफ़ से सहमत है लिंक
 – 
ttemsk
15 जुलाई 2020, 18:56