我一直在想这个问题,它可能已经在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
在这种情况下效果很好。然而,我认为需要一种更灵活的方法,例如
plot x**2 axes y1x1 # this doesn't work!
是否实现了上述内容,或者是否有一种简单的方法可以将y用作虚拟变量而无需set parametric
?
答案 0 :(得分:4)
所以这是另一个丑陋但仅限gnuplot的变体:使用特殊文件名'+'
生成用于绘图的动态数据集:
plot '+' using ($1**2):1
开发版本包含一个新功能,允许您使用虚拟变量而不是列号来与'+'
进行绘图:
plot sample [y=-10:10] '+' using (y**2):(y)
我猜这是最符合您要求的。
答案 1 :(得分:2)
从我所看到的,参数图很常见,以满足您的需求。 如果你真的讨厌参数化的情节而且你不必担心非常丑陋的解决方案,我可以给你我的方法......
我的诀窍是使用填充了一系列数字的数据文件。为了适合您的示例,让我们创建一个文件sq
,其中包含从-10
到10
的一系列实数:
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值。