我的输出空间很大,例如table = 1..900 000 000 并会创建一个2d图像。我的数据很简单: 桌子[x]
如何产生2d图像来显示这一点
0 1 2 3 ....
这是正常图像。但是麻烦是我需要平铺例如4x4
小数据示例
00 01 02 03 04 05 06 07
08 09 10 11 12 13 14 15 --->如果数据为1,29
16 17 18 19 20 21 22 23
24 25 26 27 28 29 30 31
....
我需要一个像素2x2 =如果我的点在0,1,9,8(左角2x2)内,我得到一个像素。如果我的数据中存在一个x(20或21或28或29),则第二个像素示例20、21、28、29会上色
我需要设置图像密度,我也接受脚本来操纵数据解决方案
数据:9、28生成4xn图像,左上角2个像素的颜色为(0,0),加粗为(2,1)。
答案 0 :(得分:0)
我想说,可能最可靠的方法是使用外部工具预处理数据,以生成矩阵,然后可以使用with image
绘图样式plot。
为此,您需要将数据点转换为row,col
对,以表示相应点在2D矩阵中的位置。更具体地说,假设我们要构造一个P x P
2D矩阵,其中每个像元(像素)大c x c
。对于您问题中的示例,P = 4
和c = 2
。现在,对于特定值x
,为了确定row
,我们可以将x
除(整数除法)除以最终2D矩阵的单行中的数目,即row = x / (c*c * P)
,因为存在P
个单元格,每个单元格包含c * c
个元素。对于列,我们可以先将x
归一化为间隔0 - c*P
,即2D矩阵第一行中单元格的第一行的编号,然后检查到{它属于{1}}个元素,即c
。
现在,如果数据点的数量不是太大,则可以直接在Gnuplot中对其进行处理,并将每个“像素”绘制为单独的矩形对象:
col = (x % (c*P)) / c
对于fName = 'test.dat' #data file
P = 4 #how many pixels per row/column
c = 2 #each pixel is c * c
#check how many points we have
stat fName nooutput
N = STATS_records
#load the data into an array
array points[N]
idx = 1
stat fName u (points[idx]=$1, idx=idx+1, $1) nooutput
unset key
set size square
set xr [0:P]
set yr [P:0] #reverse y-axis
set x2tics 0,1,P out nomirror
unset xtics
set ytics 0,1,P out nomirror
#construct a rectangle for each data point
do for [i=1:N] {
x = int(points[i])
row = (x / (c*c*P))
col = (x % (c*P)) / c
set object 100+i rect from col,row to col+1,row+1 fc rgb "dark-red" fillstyle solid 1.0
}
#generate the plot (the rectangles are all we wanted to show,
#so just plot "nothing")
plot 1/0
的数据值,将产生: