在gnuplot中交换轴

时间:2014-04-02 11:26:08

标签: gnuplot

我一直在想这个问题,它可能已经在gnuplot中实现了,但我无法在线查找信息。

当你有一个数据文件时,可以交换轴并将“虚拟变量”,比如x,(在gnuplot的帮助术语中)分配给垂直轴:

plot "data" u 1:2 # x goes to horizontal axis, standard
plot "data" u 2:1 # x goes to vertical axis, exchanged axes

但是,当您有一个功能时,您需要求助于参数功能来执行此操作。想象一下,你想要绘制x =y²(与y =x²相反),然后(据我所知)你需要做:

set parametric
plot t**2,t

enter image description here

在这种情况下效果很好。然而,我认为需要一种更灵活的方法,例如

plot x**2 axes y1x1 # this doesn't work!

是否实现了上述内容,或者是否有一种简单的方法可以将y用作虚拟变量而无需set parametric

3 个答案:

答案 0 :(得分:4)

所以这是另一个丑陋但仅限gnuplot的变体:使用特殊文件名'+'生成用于绘图的动态数据集:

plot '+' using ($1**2):1

开发版本包含一个新功能,允许您使用虚拟变量而不是列号来与'+'进行绘图:

plot sample [y=-10:10] '+' using (y**2):(y)

我猜这是最符合您要求的。

答案 1 :(得分:2)

从我所看到的,参数图很常见,以满足您的需求。 如果你真的讨厌参数化的情节而且你不必担心非常丑陋的解决方案,我可以给你我的方法......

我的诀窍是使用填充了一系列数字的数据文件。为了适合您的示例,让我们创建一个文件sq,其中包含从-1010的一系列实数:

seq -10 .5 10 > sq

然后你可以使用gnuplot做你想要的魔法:

plot 'sq' u ($1**2):($1)

如果你使用linux,你也可以直接在命令行中输入命令:

plot '< seq -10 .5 10' u ($1**2):($1)  

我想补充一点,我并不为这个解决方案感到自豪,我也喜欢“轴y1x1”功能。

答案 2 :(得分:0)

据我所知,在绘制函数时,无法简单地在gnuplot中反转或交换轴。

原因来自于在正常绘图模式下绘制函数的方式。沿x轴以均匀间隔存在一组点,这些点被采样(频率由set samples设置)并且计算出的函数值。这只允许表现良好的功能;每个x值一个y值。