RGB patches are a very common way of comparing color renderings. This function draws rectangular patches, and can also draw triangles formed by omitting one vertex from the rectangle.
plotPatchesRGB( obj, space='sRGB', which='signal', maxColorValue=1,
background='gray50', shape='full', add=FALSE, labels=FALSE, ... )
TRUE
if successful, and FALSE
otherwise
an Nx3 matrix of RGBs for N patches, preferably with assigned rownames
.
obj
can also be a data.frame
containing a unique matrix column whose name
starts with the string 'RGB'
.
If obj
has columns LEFT,TOP,WIDTH,HEIGHT
then these are used to place the patches,
with the Y coordinate increasing going down the page.
If obj
has columns LEFT,BOTTOM,WIDTH,HEIGHT
then these are used to place the patches,
with the Y coordinate increasing going up the page.
If there are no columns defining the location and size of the patches,
then defaults are supplied, see Details.
the name of an installed RGB space. When the input RGB is linear, a transfer function of this RGB space is used to convert linear RGB to signal RGB, see Details.
the meaning of the RGB values in obj
.
Valid values are 'signal'
, 'scene'
, and 'display'
.
See the Figure on page 2.
Partial matching is used.
For the RGB processing, see Details.
a positive number used for input RGB scaling, see Details
the color for the background behind all the patches.
If it is a character string, it is passed directly to par()
as parameter bg
.
If it is a numeric vector of length 3, it is processed just like the input RGB in obj
,
see Details.
If it is a number, it is interpreted as graylevel,
replicated to length 3, and treated as in the previous sentence.
If shape='full'
(the default) then the full rectangle is drawn.
If shape='half'
then the rectangle is shrunk to 1/2 size, and with the same center.
If shape
is one of 'left'
, 'right'
, 'bottom'
, or 'top'
then only a half-rectangle is drawn, and keeping the specified side.
If shape
is one of 'topleft'
, 'topright'
, 'bottomleft'
, or 'bottomright'
,
then only a triangular half of the rectangle is drawn,
and keeping the specified vertex.
If shape='hhex'
then a hexagon is drawn inscribed in the rectangle with 2 horizontal
opposite sides (in contact with the rectangle sides).
And if the aspect ratio of the rectangle is \( 2:\sqrt{3} \) the hexagon is regular.
If shape='vhex'
then the inscribed rectangle has 2 vertical opposite sides.
if TRUE
then the patches are added to an existing plot
controls how the patches are labeled, using rownames(obj)
,
or 1:N if rownames(obj)
is NULL
.
The function used is graphics::text()
.
If labels=FALSE
then no labels are plotted.
If labels=TRUE
then labels are plotted in the center of the patch when there are
columns defining the location and size of the patches, and to the right of the patch otherwise.
labels
can also be a character string defining the location where the labels are drawn.
It can be the side of the patches, i.e. left
, right
, top
, or bottom
,
or the corner of the patches, i.e. bottomleft
, bottomright
, topleft
, or topright
.
additional arguments passed to graphics::text()
.
For example: adj
, cex
, etc.
If which='signal'
then the input RGBs are converted to hex codes using
rgb()
using the maxColorValue
argument,
and the space
argument is ignored.
If which='scene'
or which='display'
then the input linear RGBs are normalized
by division by maxColorValue
, and then converted to signal RGB using
SignalRGBfromLinearRGB()
with the space
argument.
The signal RGB is then converted to hex codes using rgb()
.
If obj
is a matrix, or a data.frame without columns LEFT,TOP,WIDTH,HEIGHT
,
then the patches are drawn vertically stacked and abutting from top to bottom.
SignalRGBfromLinearRGB()
,
installRGB()
,
rgb()
set.seed(0)
RGB = round( 255 * matrix( runif(6*3), 6, 3 ) )
plotPatchesRGB( RGB, max=255 )
Run the code above in your browser using DataLab