-->

How to plot matrix with rgb image?

2019-07-13 00:31发布

问题:

I want to plot m*n matrix, each element of which is an rgb triple, like in the following gnuplot code snippet (rgb matrix of 3*3):

$cross << EODcross
255 0 0  0 0 0  255 0 0
0   0 0  0 0 0    0 0 0
255 0 0  0 0 0  255 0 0
EODcross

Black cross on red background. I can change delimiters between columns and color components, if needed.

Can I achieve the desired avoiding set palette rgbformulae i,j,k and directly using $cross data? Something like:

plot '$cross' matrix with image rgb

If not, I can pass 24bit-wide integers (of course, in textual representation, i.e. precalculated and converted to text r + 256 * (g + 256 * b) or b + 256 * (g + 256 * r) value). How should i,j,k triple looks like to correctly map rgb value represented in mentioned form to palette color space?

回答1:

The rgbimage plotting style expects five columns, the last three give red, blue and green values in the range [0:255]. So you can use any 24-bit integer representation of the colors, because you must extract the color channels yourself when plotting:

$data <<EOD
0xff   0 0xff00
0      0 0
0xffff 0 0xff00ff
EOD
r(x) = int(x) >> 16
g(x) = (int(x) >> 8) & 0xff
b(x) = int(x) & 0xff
plot $data matrix using 1:2:(r($3)):(g($3)):(b($3)) with rgbimage



回答2:

It seems that ascii matrix data and rgbimage do not fit together.

If you are free to format your input data, then put each column of the image into a single block, separating the blocks by two blank lines like this:

$cross << EODcross
255 0 0  
  0 0 0
255 0 0


0 0 0    
0 0 0    
0 0 0


255 0 0  
  0 0 0
255 0 0
EODcross

Then plot the cross like this:

plot $cross using -2:0:1:2:3 with rgbimage

The numbers -2 and 0 in the using section correspond to the pseudo columns "block index" and "line within a block", respectively. They are used as x and y values. The plot with rgbimage style requires x,y,r,g,b data.

This is the result: