2012-12-20 68 views
10

我正在繪製文件中的數據。數據點以公制爲單位。我想在右側(y2)顯示以標準單位表示的第二個比例。Gnuplot:如何爲不同單位添加y2軸比例

該文件代表隨着時間推移火箭發動機推力。數據以牛頓爲單位。我想在左邊顯示牛頓(這是自然發生的),並且在右邊顯示磅。轉換是一個簡單的因素(N乘以0.2248以獲得lbf)。

我可以設置y2tics,如果我手動設置y2range,它們出現在右側。我不知道該怎麼做是將y2range自動設置爲y1range *的一個因素。

我的最終解決方案是繪製兩次,一次在Y1牛頓和曾經在磅Y2,使Y2情節幾乎看不見:

plot '-' using 1:($2*0.2248) with dots axes x1y2 lc rgb 'white' notitle, \ 
     '' using 1:2 with lines lc rgb '<color>' title '<title>' 

以上的解決方案通常產生略有不同ÿ縮放:使用自動放大,gnuplot將範圍向上取整,因此每個座標軸上的最上面的刻度是一個整數,當然對於不同的單位舍入也是不同的。

最後,我結束了在每個圖中查找最高的推力值Python代碼,然後我明確地設置yrange到該號碼,y2range到數* 0.2248:

f.write("set yrange [0:%s]; set y2range[0:%s]\n" % (peak_thrust, peak_thrust*NEWTON_LBF)); 

這裏的最終結果是:http://www.lib.aero/hosted/motors/cesaroni_12-15-12.html (下面的示例圖) enter image description here

+0

良好的信息。謝謝你從2017年11月。但是,我看到你說「帶點」,我沒有看到任何點。另外,你可以顯示你的數據文件的樣子嗎? – SDsolar

回答

16

在我看來,要做到這一點,最簡單的方法是簡單地縮放數據:

set y2tics 
plot sin(x) w lines, 5*sin(x) w lines axes x1y2 

當然,你從一個文件繪製數據,所以它看起來更像是:

set y2tics 
FACTOR=0.2248 #conversion factor from newtons to lbf 
plot 'datafile' u 1:2 w lines, '' u 1:(FACTOR*$2) w lines 

如果你明確地設置yrange(你可能需要做的):

set yrange [ymin:ymax] 
set y2range [ymin*FACTOR:ymax*FACTOR] 

最後,如果你真的想依靠自動縮放,你將需要做一些「體操」。

首先,設置了啞終端,所以我們可以plot未做一個情節:

set term unknown 
plot 'datafile' u 1:2 #collect information on our data 

現在,我們已經收集到的數據信息,我們可以設置我們真正y2range

FACTOR=0.2248 
set y2range [FACTOR*GPVAL_Y_MIN : FACTOR*GPVAL_Y_MAX] 
set y2tics nomirror 
set ytics nomirror 

現在設置終端並繪製數據:

set term ... 
set output ... 
plot 'datafile' u 1:2 w lines 
+1

那麼最重要的是我需要兩次繪製數據,一次在每個y軸上? – iter

+0

@iter - 我想不是真的。 (請參閱我的更新代碼)。如果你明確地設置y2range,你可以解決這個問題。 – mgilson

+1

我上面看到的每個代碼片段都繪製兩次(除了明確設置範圍的那個,我不想這麼做;我依靠自動縮放)。最後一個片段也繪製兩次,它只是拋出第一個陰謀(對假終端) – iter

2

我知道這是一個老問題,答案已經被接受,但我認爲值得分享我的方法。

我只是使用修改後的標籤爲x2axis。在你的情況,這將是

set y2tics ("10" 10/0.2248, "20" 20/0.2248 etc etc... 

可循環這樣

do for [i=0:1000:10] { set y2tics add (sprintf("%i",i) i/0.2248) } 

其中for範圍應該根據自己的數據(你可以使用stats和全面和平的變量GPVAL_DATA_Y_MAX調整)。 不要忘記

set ytics nomirror 

這會給正是你尋找的,在(幾乎)是一個內襯: enter image description here

如果你想使用一個網格,對轉換後的因素的x2axis,從而例如到標記y = 50 N將對應Y2 = 11.2(這使人感覺整潔如果使用網格)可以做

do for [i=0:1000:50] { set y2tics add (sprintf("%5.1f",i*0.2248) } 

這是結果: enter image description here

+0

值得添加。謝謝。 – SDsolar

10

5.0版增加了對這類的yy2(或者也xx2)之間的關係的軸:

set xrange[0:370] 
set ytics nomirror 
set y2tics 
set link y2 via 0.2248*y inverse y/0.2248 
plot x 

example for <code>set link</code>

+0

如果y和y2座標軸都是對數,我無法得到這個工作:(有一個討論[這裏](https://sourceforge.net/p/gnuplot/bugs/1736/) – vagoberto

+0

@vagoberto對不起,不禁幫助我試圖把y和y2的鏈接與'set nonlinear'(新添加到CVS)結合起來,但是你不能合併這些。 – Christoph

+0

謝謝你提供這些信息。直接使用'set link y2 = Y方面的東西'對於簡單的轉換是非常好的,例如Deg F在一邊,Deg C在另一邊。 – SDsolar