【问题标题】:How to make a a arrow script in gnuplot from a series of grepped data from an text file如何从文本文件中的一系列 grepped 数据在 gnuplot 中制作箭头脚本
【发布时间】:2019-10-11 08:03:32
【问题描述】:

我的数据文件是:

============

     This is your required output
Range:  -42.3732  666.3634eV  Yi, Yf > DATA-point FIX:  0.0000 0.0000 0.0000   x LIST   0.0000
DATA-point FIX:  0.5000 0.0000 0.0000   x LIST   0.5000
DATA-point FIX:  0.7500 0.3750 0.2641   x LIST   1.0224
DATA-point FIX:  0.0000 0.0000 0.0000   x LIST   1.9015
DATA-point FIX:  0.3750 0.3750 0.5282   x LIST   2.6500
DATA-point FIX:  0.5000 0.5000 0.3522   x LIST   2.8995
DATA-point FIX:  0.0000 0.0000 0.0000   x LIST   3.6895
DATA-point FIX:  0.5000 0.0000 0.3522   x LIST   4.3010
DATA-point FIX:  0.6250 0.2500 0.4402   x LIST   4.5941
DATA-point FIX:  0.7500 0.2500 0.3522   x LIST   4.7470
DATA-point FIX:  0.5000 0.5000 0.3522   x LIST   5.1005
DATA-point FIX:  0.5000 0.2500 0.5282   x LIST   5.4063

done junk has written below this part

========

我要设置号码

`-42.3732 and 666.3634 as y-axis limit` 

然后想从

中画出箭头
 Xi, Yi to Xi, Yi nohead

其中 Xi 是一个可变数字,取决于数据文件,但我可以使用 grep 来获取它

 grep LIST data.dat |  awk '{print $NF}'

Yi and Yf are the y-axis limit as mentioned above but changes according to data file so these numbers are not the one that I mention here).

我想在我的 gnu 脚本中从 Xi、Yi 到 Xi、Yf 的每个点上绘制箭头。

我有一些想法,如果我们将上述数据以变量形式存储并像这样进行操作,可以做到这一点

set VARIABLE

变量是这样的

VARIABLE=`arrow from Xi,Yi to Xi,Yf nohead ; set`

对于下一部分,我想用一些字母来标记 x 轴上的每个 Xi

X, Y, Z, .....

您能告诉我如何在 gnuplot 中管理它吗?

【问题讨论】:

  • 你能提供一个例子,或者你想要达到的目标吗?
  • 我也不确定你想要完成什么,但如果你想在坐标来自文件的点之间绘制箭头,你最好使用plot ... with vectors而不是set arrow。跨度>
  • 在您的数据中,我看到 4 列数字。最后一个显然是xi。哪个是yi,哪个是yffi 是什么?我也不清楚。这个> 登录您上面的数据是正确的还是错误的?
  • 如果您仍然对答案感兴趣,最好澄清一下。如果您找到了答案,最好将您的解决方案发布为答案并将其标记为已接受。
  • 亲爱的大家,我尊重您的所有回复。很抱歉没能及时回复大家。我的假期很长,周一回来。

标签: gnuplot


【解决方案1】:

从您的描述中我仍然不清楚从哪里获取哪些值。

我的理解如下: 您有一个(或多个?)文件具有您提供的结构(而第二行的结构与> 和这之后的数据对我来说看起来很奇怪)。 据我了解,awk 命令提取一行中最后一个标记(列)的值。 所以,我假设xi 是每一行的最后一个值。在第 2 行中,xi 将在第 14 列中,而在以下所有行中,xi 将在第 8 列中。

gnuplot(没有 awk)中的过程如下:

  1. 将文件绘制到虚拟表中。如果行号为 1(即 ($0==1)),则将第 2 列 $2 和第 3 列 $3 中的值分别分配给 YminYmax。始终将列值 8 $8 分配给 Xmax,因此绘制后 Xmax 将包含最后一个值,此处为 5.4063。
  2. 然后绘制文件with vectors(跳过第一行)并将第 14 列用于下一行,将第 8 列用于所有其他行作为xi 值。

在您发表评论后,这可能是您想要的更多。 输入help <keyword> 时,您可以从 gnuplot 帮助中获取详细信息,例如help vectors.

代码:(在cmets后修改)

### Extract values from file
reset session

FILE = 'tbExtractArrow.dat'

# extract Ymin, Ymax and Xmax
set table $Dummy
    plot FILE u ($0==1?(Ymin=$2,Ymax=$3):NaN,Xmax=$8) w table
unset table
print Ymin,Ymax,Xmax

# define formula for column to extract xi
myColumn(n) = n==0 ? 14 : 8

set xrange [0:Xmax]
set yrange[Ymin:Ymax]
set xtics ( "{/Symbol G}" 0.00000, "{/Times-New, F}" 0.27445, "{/Times-New Q}" 0.46775, "{/Times-New, Z}" 0.74220, "{/Symbol G}" 0.93550, "etc." 1.4) 

plot FILE skip 1 u (column(myColumn($0))):(Ymin):(0):(Ymax-Ymin) w vectors nohead lw 2 lc rgb "red" notitle
### end of code

结果:

【讨论】:

  • 亲爱的theozh,这与我正在寻找的非常相似。但这将是我唯一的 gnuplot 盒子。我将绘制的实际数据来自其他文件。我在寻找什么可以在下面的谷歌链接上看到(你可以更喜欢不要顶角的情节)。 x 范围将是 [0:Xf],其中 Xf 是 Xi 的最后一个数字,此处为 5.4063。另外,我不会自动提及 x 轴标签,而是使用这个 set xtics ( "{/Symbol G}" 0.00000, "{/Times-New, F}" 0.27445, "{/Times-New Q}" 0.46775, "{/Times-New, Z}" 0.74220, "{/Symbol G}" 0.93550, ) ......"(我将管理 x 轴刻度)。
  • 我们有不同的时区,所以我无法及时回复。
  • 啊,我忘了。在这里:google.com/…
  • 它对我有用。但是仍然存在一个错误 Xmax 似乎无法正常工作“plot.gnu”,第 24 行:x range is invalid 。无论如何,我可以用 status 选项定义 Xmax。 "
  • 我将使用我的原始文件在“plot FILE skip 1 u (column(myColumn($0))):(Ymin):(0):(Ymax-Ymin) w 向量 nohead lw 之后进行绘图2 lc rgb "red" notitle" plot 'my_data.dat' u 1:2 wl lc 2 title "band" 这个 my_data.dat 有 n 条平行于 x 轴的不同高度的线,我想制作底部的三个它们有不同的颜色。如下图(c)中的链接pubs.rsc.org/image/article/2018/ta/c8ta03150a/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多