2012-10-05 13 views
9

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

मुझे नहीं पता कि यह कुशलता से कैसे किया जाए, अब तक मेरे कोड में मैन्युअल रूप से मेरे tics के लिए ऑफसेट सेट करता है, और मैन्युअल रूप से ऑफ़सेट का उपयोग करके तीर खींचता है। मैंने धुरी लेबल पर ऑफ़सेट सेट भी किया है। यह सब बहुत नाजुक है, और टर्मिनल सेटिंग्स के आधार पर ऑफ़सेट बदल जाता है।

क्या कोई मुझे नमूना कोड या स्पष्टीकरण के साथ मदद करेगा कि यह सही तरीके से कैसे करें?

उत्तर

10

ठीक है, _zeroaxis का उपयोग करने के लिए टिक्स और लेबल प्राप्त करने के लिए "सही" तरीका है: _range को सेट करने से आपको 0,0 केंद्र बनाने के लिए समरूपता मिलती है ... और एक बार जब आप _range को जानते हैं, तो आप आकर्षित कर सकते हैं मैन्युअल रूप से तीर।

set xzeroaxis 
set xtics axis 
set xrange [-10:10] 
set arrow 1 from -9,0 to -10,0 
set arrow 2 from 9,0 to 10,0 

set yzeroaxis 
set ytics axis 
set yrange [-1:1] 
set arrow 3 from 0,-.9 to 0,-1 
set arrow 4 from 0,.9 to 0,1 

set border 0 

plot sin(x) 

enter image description here

+2

+1। 'शून्यaxis' सेट एक अक्ष में उत्पत्ति के माध्यम से दोनों अक्ष बनाने के लिए लगता है। आप अक्ष के लिए इच्छित मोटाई और रेखा प्रकार भी निर्दिष्ट कर सकते हैं: 'शून्यaxis linewidth 2 linetype 1', आदि सेट करें – Umang

+0

आप' x2tics 'को अनसेट करना और पहले y2tics को अनसेट करना चाहते हैं। अन्यथा आप दो बार दिखाए गए सभी चित्र प्राप्त करते हैं। – d3dave

3

हैक हमला! enter image description here

जिसके अनुसार, आप zeroaxis विकल्प में दिख सकता है:

set term pngcairo truecolor size 300,300 font "Arial,12" 
set out 'plot.png' 

# x,y min/max and center 
xmin = -10 
xc = 0 
xmax = 10 
ymin = -2 
yc = 0 
ymax = 2 
# default borders 
tm = 1 
bm = 1 
rm = 4 
lm = 4 
# arrow scale factor to cover last tic 
af = 1.05 
set arrow from xc,yc to xmin*af,yc filled size 0.6,30 
set arrow from xc,yc to xmax*af,yc filled size 0.6,30 
set arrow from xc,yc to xc,ymax*af filled size 0.6,30 
set arrow from xc,yc to xc,ymin*af filled size 0.6,30 

set multiplot layout 2,2 
## Plot 1, top left 
set key top left 
set xr [xmin:xc] 
set yr [yc:ymax] 
set tmargin tm 
set bmargin 0 
set rmargin 0 
set lmargin lm 
set border 9 
unset ytics 
set xtics nomirror 
plot sin(x) 
## Plot 2, top right 
unset key 
set xr [xc:xmax] 
set lmargin 0 
set rmargin rm 
set border 3 
set ytics nomirror 
replot 
## Plot 3, bottom left 
set xr [xmin:xc] 
set yr [ymin:yc] 
set bmargin bm 
set tmargin 0 
set lmargin lm 
set rmargin 0 
set border 12 
unset tics 
replot 
## Plot 4, bottom right 
set xr [xc:xmax] 
set lmargin 0 
set rmargin rm 
set border 6 
set ytics nomirror 
replot 
unset multiplot 

मैं इस उत्पादन मिलता है। एक प्रदर्शन here है। अफसोस की बात यह विकल्प धुरी को शून्य पर नहीं खींचता है, लेकिन उस स्थिति में बस एक रेखा डालता है।

मैं नहीं कहूंगा कि मेरी विधि 'कुशल' है, लेकिन शायद आपके उद्देश्यों के लिए इसे संशोधित करने के लिए बहुत अधिक प्रयास नहीं किया जा रहा है, क्योंकि अधिकांश कार्य replot कमांड द्वारा किए गए हैं। मुझे अक्ष के अंत में gnuplot तीर डालने या बदलने के लिए विकल्प नहीं पता है जहां अक्ष को मूल रूप से खींचा जाता है।

+0

+1 करने के लिए लाया जा सकता है, तो "हैक हमला!" (और एक अच्छी लग रही साजिश) – mgilson

1

जिम की जवाब के अलावा, tics और कुल्हाड़ियों की आवश्यकता के लिए सामने

# bring the grid over the plot 
set grid front 

# remove grid if not required 
unset grid 
संबंधित मुद्दे