如何从一维数组创建二维图像(设置密度)

时间:2018-07-28 10:07:35

标签: gnuplot

我的输出空间很大,例如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)。

1 个答案:

答案 0 :(得分:0)

我想说,可能最可靠的方法是使用外部工具预处理数据,以生成矩阵,然后可以使用with image绘图样式plot

为此,您需要将数据点转换为row,col对,以表示相应点在2D矩阵中的位置。更具体地说,假设我们要构造一个P x P 2D矩阵,其中每个像元(像素)大c x c。对于您问题中的示例,P = 4c = 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 的数据值,将产生: enter image description here