我有一个包含2列原始未绑定数据的文件(x和y位移)。文件中的每一行对应一个新的时间步。我想将x和y位移相互关联。
对于每一行,我想将x值加之并将y值加到直方图中,然后加上一个' count'到相应的(x,y)bin。
我有一个代码已经完成了大部分工作,它将每个轴分开,然后放置一个点/' count'在相应的空间,但问题是它没有添加'计数'一起。相反,这些点只是相互重叠。您可以看到一些点看起来比其他多个点彼此重叠的点更粗/更暗。像这样:
Gnuplot output with my full data set. Shows the bolder overlapping points
我的问题是:我怎样才能获得积分/数字'相互叠加的(比如在我的图像中),将被添加到一起,以便我可以看到更高相关性的区域与颜色图或类似的东西在哪里?
我的gnuplot代码有点像我想做的那样:
#!/usr/local/bin/gnuplot
set term postscript eps enhanced color
set encoding utf8
set offsets
set style fill solid
bin(x,width,min)=width*(floor((abs(x) - min)/width) + 0.5) + min
set output '2d.test.eps'
set palette defined (-1 "red", 0 "white", 1 "blue")
set cbrange [0:10]
binwidth=0.1
binwidth=0.1
xmin=-360
ymin=-360
set boxwidth binwidth*0.75
set view map
splot '2d.dat' using (bin($1,binwidth,xmin)):(bin($2,binwidth,ymin)):(1.0) not
数据文件格式:
0.864 3.868
1.878 3.617
0.138 2.787
0.646 3.220
-0.969 3.176
-0.447 3.031
-0.316 3.130
0.205 3.342
-1.127 3.661
-1.349 3.702
...
答案 0 :(得分:1)
如果您愿意使用awk进行计算并使用uniq进行计数,则可以使用:
awk 'function abs(x){return (sqrt(x*x))}{print 0.1*(int((abs($1)+360)/0.1)+0.5)-360" "0.1*(int((abs($2)+360)/0.1)+0.5)-360}' input.dat | sort | uniq -c > output.dat
由于uniq预先计算了你需要绘制的数字,如
set view map
splot "output.dat" 2:3:1 matrix with image
这也应该直接来自gnuplot:
splot "<awk 'function abs(x){return (sqrt(x*x))}{print 0.1*(int((abs($1)+360)/0.1)+0.5)-360\" \"0.1*(int((abs($2)+360)/0.1)+0.5)-360}' data.dat | sort | uniq -c" u 2:3:1 2:3:1 matrix with image
(注意逃脱的#34;字符!)