Matrix 如何在gnuplot中按行打印
我有一个这种格式的文件Matrix 如何在gnuplot中按行打印,matrix,gnuplot,rows,Matrix,Gnuplot,Rows,我有一个这种格式的文件 0 R1 R2 R3 R4 w1 I1 I2 I3 I4 w2 I1 I2 I3 I4 w3 I1 I2 I3 I4 在许多波长w中,半径R和强度I的值。我想在2D中绘制x轴的第1行(半径)和y轴的第3行(选择w2) 如何绘制每行?非每列这可能不是最优雅的解决方案,但您可以先过滤两行(包含x值的标题和对应于感兴趣波长的行),并排打印,最后使用Gnuplot绘制此辅助数据 为此,策略是在目录中创建一个名为filter.awk的脚本,您希望
0 R1 R2 R3 R4
w1 I1 I2 I3 I4
w2 I1 I2 I3 I4
w3 I1 I2 I3 I4
在许多波长w中,半径R和强度I的值。我想在2D中绘制x轴的第1行(半径)和y轴的第3行(选择w2)
如何绘制每行?非每列这可能不是最优雅的解决方案,但您可以先过滤两行(包含x值的标题和对应于感兴趣波长的行),并排打印,最后使用Gnuplot绘制此辅助数据 为此,策略是在目录中创建一个名为filter.awk的脚本,您希望从该目录执行Gnuplot,其中包含以下内容:
NR==1{
N = NF-1;
for(i=1;i<=N;i++) x[i] = $(i+1);
next;
}
$1==w{
printf "#%f\n", $1;
for(i=1;i<=N;i++) print x[i], $(i+1);
printf "\n";
}
其中,data.dat
将是您的输入数据,100
的值表示应该过滤的波长
要概括这一点,例如,可以:
cmd(w)=sprintf('<gawk -v w=%f -f filter.awk test.dat', w);
plot for [w in "100 200"] cmd(w+0) w l t sprintf('wave length of %.1f', w+0)
cmd(w)=sprintf(“这可能不是最优雅的解决方案,但您可以先过滤两行(包含x值的标题和对应于感兴趣波长的行),并排打印它们,最后使用Gnuplot绘制此辅助数据
为此,策略是在目录中创建一个名为
filter.awk的脚本,您希望从该目录执行Gnuplot,其中包含以下内容:
NR==1{
N = NF-1;
for(i=1;i<=N;i++) x[i] = $(i+1);
next;
}
$1==w{
printf "#%f\n", $1;
for(i=1;i<=N;i++) print x[i], $(i+1);
printf "\n";
}
其中,data.dat
将是您的输入数据,100
的值表示应该过滤的波长
要概括这一点,例如,可以:
cmd(w)=sprintf('<gawk -v w=%f -f filter.awk test.dat', w);
plot for [w in "100 200"] cmd(w+0) w l t sprintf('wave length of %.1f', w+0)
cmd(w)=sprintf(“一个解决方案是使用正确的格式(列中的数据)创建一个新文件。
首先创建一个函数来读取文件中的数据(请参阅主题“将数据集值读入gnuplot变量(X系列的开始)”):
因此,构建新文件并打印它:
do for [j=1:5] { # 5 = number of your columns
x = at(file,1,j) # x axis in your example
y = at(file,3,j) # y axis
set print "newFile.txt" append
print x," ",y
set print
}
plot "newFile.txt"
每次执行此过程时,请确保删除newFile.txt
。一个解决方案是使用正确的格式(数据列中)创建一个新文件。
首先创建一个函数来读取文件中的数据(请参阅主题“将数据集值读入gnuplot变量(X系列的开始)”):
因此,构建新文件并打印它:
do for [j=1:5] { # 5 = number of your columns
x = at(file,1,j) # x axis in your example
y = at(file,3,j) # y axis
set print "newFile.txt" append
print x," ",y
set print
}
plot "newFile.txt"
每次执行此过程时,请确保删除newFile.txt