我正在绘制文件中的数据.数据点以公制单位表示.我想在右边显示第二个刻度(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>'
Run Code Online (Sandbox Code Playgroud)
上面的解决方案通常会产生稍微不同的y刻度:使用autoragne,gnuplot会使范围向上舍入,因此每个轴上的顶部刻度是一个圆数,当然,不同单位的舍入是不同的.
最终,我最终得到了每个图中找到最高推力值的Python代码,然后我明确地将yrange设置为该数字,并将y2range设置为该数字*0.2248:
f.write("set yrange [0:%s]; set y2range[0:%s]\n" % (peak_thrust, peak_thrust*NEWTON_LBF));
Run Code Online (Sandbox Code Playgroud)
以下是最终结果:http://www.lib.aero/hosted/motors/cesaroni_12-15-12.html(下面的示例图表)

mgi*_*son 15
在我看来,最简单的方法是简单地缩放数据:
set y2tics
plot sin(x) w lines, 5*sin(x) w lines axes x1y2
Run Code Online (Sandbox Code Playgroud)
当然,您正在绘制文件中的数据,因此它看起来更像是:
set y2tics
FACTOR=0.2248 #conversion factor from newtons to lbf
plot 'datafile' u 1:2 w lines, '' u 1:(FACTOR*$2) w lines
Run Code Online (Sandbox Code Playgroud)
如果您明确设置了yrange(您可能需要这样做):
set yrange [ymin:ymax]
set y2range [ymin*FACTOR:ymax*FACTOR]
Run Code Online (Sandbox Code Playgroud)
最后,如果你真的想依靠自动缩放,你将需要做一些"体操".
首先,设置一个虚拟终端,这样我们可以plot不用绘图:
set term unknown
plot 'datafile' u 1:2 #collect information on our data
Run Code Online (Sandbox Code Playgroud)
现在我们已经收集了有关数据的信息,我们可以设置真实的 y2range
FACTOR=0.2248
set y2range [FACTOR*GPVAL_Y_MIN : FACTOR*GPVAL_Y_MAX]
set y2tics nomirror
set ytics nomirror
Run Code Online (Sandbox Code Playgroud)
现在设置终端并绘制数据:
set term ...
set output ...
plot 'datafile' u 1:2 w lines
Run Code Online (Sandbox Code Playgroud)
Chr*_*oph 13
5.0版增加了对y和y2(或者x和x2)轴之间这种关系的支持:
set xrange[0:370]
set ytics nomirror
set y2tics
set link y2 via 0.2248*y inverse y/0.2248
plot x
Run Code Online (Sandbox Code Playgroud)

我知道这是一个老问题,答案已经被接受,但我认为值得分享我的方法。
我只是对 x2axis 使用修改后的标签。在你的情况下,这将是
set y2tics ("10" 10/0.2248, "20" 20/0.2248 etc etc...
Run Code Online (Sandbox Code Playgroud)
可以这样循环
do for [i=0:1000:10] { set y2tics add (sprintf("%i",i) i/0.2248) }
Run Code Online (Sandbox Code Playgroud)
for应根据您的数据调整范围(您可以使用和stats变量GPVAL_DATA_Y_MAX来完全放心)。别忘了
set ytics nomirror
Run Code Online (Sandbox Code Playgroud)
这将在(几乎)单行中准确地给出您正在寻找的内容:

如果您想使用网格并在 上具有转换后的因子x2axis,例如标签 y=50 N 将对应 y2=11.2 (如果您使用网格,它会使事情保持整洁),您可以这样做
do for [i=0:1000:50] { set y2tics add (sprintf("%5.1f",i*0.2248) }
Run Code Online (Sandbox Code Playgroud)
这是结果:

| 归档时间: |
|
| 查看次数: |
57232 次 |
| 最近记录: |