Gnuplot 如何从一维阵列创建二维图像(设置密度)

Gnuplot 如何从一维阵列创建二维图像(设置密度),gnuplot,Gnuplot,我有很大的输出空间,例如table=1..9000000 并将创建一个二维图像。我的数据很简单: 表[x] 如何生成二维图像来显示这些点 01 2 3 这是正常的图像。但问题是我需要瓷砖,例如4x4 小数据示例 00 0102 03 04 05 06 07 08 0910 11 12 13 14 15--->如果数据为1,29 1617181920212223 2425262728293031 我需要一个像素2x2=如果我的点在0,1,9,8(左角2x2),我得到一个像素。第二像素示例20,

我有很大的输出空间,例如table=1..9000000 并将创建一个二维图像。我的数据很简单: 表[x]

如何生成二维图像来显示这些点

01 2 3

这是正常的图像。但问题是我需要瓷砖,例如4x4


小数据示例

00 0102 03 04 05 06 07

08 0910 11 12 13 14 15--->如果数据为1,29

1617181920212223

2425262728293031

我需要一个像素2x2=如果我的点在0,1,9,8(左角2x2),我得到一个像素。第二像素示例20,21,28,29是彩色的,如果我的数据中存在一个x(20或21或28或29)

我需要设置我的图像密度,我也接受脚本来操作我的数据解决方案


数据:9,28生成4xn图像,左上角为2像素彩色(0,0),粗体为(2,1)。

我想说,最可靠的方法可能是使用外部工具预处理数据,以便生成矩阵,然后使用带有图像的
打印样式生成矩阵

为此,需要将数据点转换为表示2D矩阵中对应点位置的
行、列
对。更具体地说,假设我们想要构造一个
pxp
2D矩阵,其中每个单元(像素)都
cxc
大。对于您问题中的示例,
P=4
c=2
。现在,对于一个特定的值
x
,为了确定
,我们可以将(整数除法)
x
除以最终2D矩阵的一行中的数字数量,即
行=x/(c*c*P)
,因为存在
P
单元格,每个单元格都有
c*c
元素。对于列,我们可以首先将
x
标准化为区间
0-c*P
,即2D矩阵第一行中第一行单元格的编号,然后检查它属于哪一组
c
元素,即
col=(x%(c*P))/c

现在,如果数据点的数量不是太多,可以直接在Gnuplot中处理,并将每个“像素”绘制为单独的矩形对象:

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
对于
1,29的数据值,这将产生:

你需要解释你想做什么。从这里,您似乎只是随机选择了块18,19,25,26。我们实际上不知道你的逻辑是什么,你需要完成什么。@DanSp。你知道什么是“或”吗?我需要彩色像素的图像,如果数据是在矩形。我写粗体像素,并举例添加数据。我写前后的数据和信息。我还能写些什么?