| % File src/library/grDevices/man/x11.Rd |
| % Part of the R package, https://www.R-project.org |
| % Copyright 1995-2018 R Core Team |
| % Distributed under GPL 2 or later |
| |
| \name{x11} |
| \title{X Window System Graphics (X11)} |
| \alias{x11} |
| \alias{X11} |
| \alias{X11.options} |
| |
| \description{ |
| \describe{ |
| \item{on Windows,}{the \code{X11()} and \code{x11()} functions are |
| simple wrappers to \code{\link{windows}()} for historical |
| compatibility convenience: Calling \code{x11()} or \code{X11()} would work in most |
| cases to open an interactive graphics device. |
| |
| In \R versions before 3.6.0, the Windows version had a shorter |
| list of formal arguments. Consequently, calls to \code{X11(*)} |
| with arguments should \emph{name} them for back compatibility. |
| |
| Almost all information below does \emph{not} apply on Windows.} |
| |
| \item{on Unix-alikes}{\code{X11} starts a graphics device driver for |
| the X Window System (version 11). This can only be done on |
| machines/accounts that have access to an X server. |
| |
| \code{x11} is recognized as a synonym for \code{X11}. |
| |
| The \R function is a wrapper for two devices, one based on Xlib |
| (\url{https://en.wikipedia.org/wiki/Xlib}) and one using cairographics |
| (\url{http://www.cairographics.org}).} |
| } |
| } |
| \usage{ |
| X11(display = "", width, height, pointsize, gamma, bg, canvas, |
| fonts, family, xpos, ypos, title, type, antialias) |
| |
| X11.options(\dots, reset = FALSE) |
| } |
| \arguments{ |
| \item{display}{the display on which the graphics window will appear. |
| The default is to use the value in the user's environment variable |
| \env{DISPLAY}. This is ignored (with a warning) if an X11 device is |
| already open on another display.} |
| |
| \item{width, height}{the width and height of the plotting window, in |
| inches. If \code{NA}, taken from the resources and if |
| not specified there defaults to \code{7} inches. See also |
| \sQuote{Resources}.} |
| |
| \item{pointsize}{the default pointsize to be used. Defaults to \code{12}.} |
| |
| \item{gamma}{gamma correction fudge factor. |
| Colours in R are sRGB; if your monitor does not conform to |
| sRGB, you might be able to improve things by tweaking this |
| parameter to apply additional gamma correction to the RGB channels. |
| By default 1 (no additional gamma correction).} |
| |
| \item{bg}{colour, the initial background colour. Default |
| \code{"transparent"}.} |
| |
| \item{canvas}{colour. The colour of the canvas, which is visible only |
| when the background colour is transparent. Should be an opaque colour |
| (and any alpha value will be ignored). Default \code{"white"}.} |
| |
| \item{fonts}{for \code{type = "Xlib"} only: |
| X11 font description strings into which weight, slant and |
| size will be substituted. There are two, the first for fonts 1 to 4 |
| and the second for font 5, the symbol font. See section \sQuote{Fonts}.} |
| |
| \item{family}{The default family: a length-one character string. This |
| is primarily intended for cairo-based devices, but for \code{type = |
| "Xlib"}, the \code{\link{X11Fonts}()} database is used to map family |
| names to \code{fonts} (and this argument takes precedence over that |
| one).} |
| |
| \item{xpos, ypos}{integer: initial position of the top left corner of the |
| window, in pixels. Negative values are from the opposite corner, |
| e.g.\sspace{}\code{xpos = -100} says the top right corner should be 100 pixels |
| from the right edge of the screen. If \code{NA} (the default), |
| successive devices are cascaded in 20 pixel steps from the top left. |
| See also \sQuote{Resources}.} |
| |
| \item{title}{character string, up to 100 bytes. With the default, |
| \code{""}, a suitable title is created internally. A C-style format |
| for an integer will be substituted by the device number (see the |
| \code{file} argument to \code{\link{postscript}} for further |
| details). How non-ASCII titles are handled is |
| implementation-dependent.} |
| |
| \item{type}{character string, one of \code{"Xlib"}, \code{"cairo"}, |
| \code{"nbcairo"} or \code{"dbcairo"}. Only the first will be |
| available if the system was compiled without support for |
| cairographics. The default is \code{"cairo"} where available except |
| on macOS, otherwise \code{"Xlib"}.} |
| |
| \item{antialias}{for cairo types, the type of anti-aliasing (if any) |
| to be used. One of \code{c("default", "none", "gray", "subpixel")}.} |
| |
| \item{reset}{logical: should the defaults be reset to their defaults?} |
| |
| \item{\dots}{Any of the arguments to \code{X11}, plus \code{colortype} |
| and \code{maxcubesize} (see section \sQuote{Colour Rendering}).} |
| } |
| \details{ |
| The defaults for all of the arguments of \code{X11} are set by |
| \code{X11.options}: the \sQuote{Arguments} section gives the |
| \sQuote{factory-fresh} defaults. |
| |
| The initial size and position are only hints, and may not be acted on |
| by the window manager. Also, some systems (especially laptops) are |
| set up to appear to have a screen of a different size to the physical |
| screen. |
| |
| Option \code{type} selects between two separate devices: \R can be |
| built with support for neither, \code{type = "Xlib"} or both. Where |
| both are available, types \code{"cairo"}, \code{"nbcairo"} and |
| \code{"dbcairo"} offer |
| \itemize{ |
| \item |
| antialiasing of text and lines. |
| \item |
| translucent colours. |
| \item |
| scalable text, including to sizes like 4.5 pt. |
| \item |
| full support for UTF-8, so on systems with suitable fonts you can |
| plot in many languages on a single figure (and this will work even |
| in non-UTF-8 locales). The output should be locale-independent. |
| } |
| |
| There are three variants of the cairo-based device. \code{type = |
| "nbcairo"} has no buffering. \code{type = "cairo"} has some |
| buffering, and supports \code{\link{dev.hold}} and \code{dev.flush}. |
| \code{type = "dbcairo"} buffers output and updates the screen about |
| every 100ms (by default). The refresh interval can be set (in units |
| of seconds) by e.g.\sspace{}\code{\link{options}(X11updates = 0.25)}: the |
| value is consulted when a device is opened. Updates are only looked |
| for every 50ms (at most), and during heavy graphics computations only |
| every 500ms. |
| |
| Which version will be fastest depends on the X11 connection and the |
| type of plotting. You will probably want to use a buffered type |
| unless backing store is in use on the X server (which for example it |
| always is on macOS displays), as otherwise repainting when the |
| window is exposed will be slow. On slow connections \code{type = |
| "dbcairo"} will probably give the best performance. |
| |
| Because of known problems with font selection on macOS without |
| Pango (for example, the CRAN distribution), \code{type = "cairo"} is |
| not the default there. These problems have included mixing up bold |
| and italic (since worked around), selecting incorrect glyphs and ugly |
| or missing symbol glyphs. |
| |
| All devices which use an X11 server (including the \code{type = |
| "Xlib"} versions of bitmap devices such as \code{\link{png}}) share |
| internal structures, which means that they must use the same |
| \code{display} and visual. If you want to change display, first close |
| all such devices. |
| |
| The cursor shown indicates the state of the device. If quiescent the |
| cursor is an arrow: when the locator is in use it is a crosshair |
| cursor, and when plotting computations are in progress (and this can |
| be detected) it is a watch cursor. (The exact cursors displayed will |
| depend on the window manager in use.) |
| } |
| |
| \section{X11 Fonts}{ |
| This section applies only to \code{type = "Xlib"}. |
| |
| An initial/default font family for the device can be specified via |
| the \code{fonts} argument, but if a device-independent R graphics font |
| family is specified (e.g., via \code{par(family =)} in the graphics |
| package), the X11 device makes use of the X11 font database (see |
| \code{X11Fonts}) to convert the R graphics font family to an |
| X11-specific font family description. If \code{family} is supplied as |
| an argument, the X11 font database is used to convert that, but |
| otherwise the argument \code{fonts} (with default given by |
| \code{X11.options}) is used. |
| |
| X11 chooses fonts by matching to a pattern, and it is quite possible |
| that it will choose a font in the wrong encoding or which does not |
| contain glyphs for your language (particularly common in |
| \code{iso10646-1} fonts). |
| |
| The \code{fonts} argument is a two-element character vector, and the |
| first element will be crucial in successfully using |
| non-Western-European fonts. Settings that have proved useful include |
| |
| \code{"-*-mincho-\%s-\%s-*-*-\%d-*-*-*-*-*-*-*"} for CJK languages and |
| \code{"-cronyx-helvetica-\%s-\%s-*-*-\%d-*-*-*-*-*-*-*"} for Russian. |
| |
| For UTF-8 locales, the \code{XLC_LOCALE} databases provide mappings |
| between character encodings, and you may need to add an entry for your |
| locale (e.g., Fedora Core 3 lacked one for \code{ru_RU.utf8}). |
| } |
| |
| \section{Cairo Fonts}{ |
| The cairographics-based devices work directly with font family names |
| such as \code{"Helvetica"} which can be selected initially by the |
| \code{family} argument and subsequently by \code{\link{par}} or |
| \code{\link{gpar}}. There are mappings for the three |
| device-independent font families, \code{"sans"} for a sans-serif font |
| (to \code{"Helvetica"}), \code{"serif"} for a serif font (to |
| \code{"Times"}) and \code{"mono"} for a monospaced font (to |
| \code{"Courier"}). |
| |
| The font selection is handled by \code{Pango} (usually \emph{via} |
| \code{fontconfig}) or \code{fontconfig} (on macOS and perhaps |
| elsewhere). The results depend on the fonts installed on the system |
| running \R -- setting the environmnent variable \env{FC_DEBUG} to 1 |
| normally allows some tracing of the selection process. |
| |
| This works best when high-quality scalable fonts are installed, |
| usually in Type 1 or TrueType formats: see the \dQuote{R Installation |
| and Administration Manual} for advice on how to obtain and install |
| such fonts. At present the best rendering (including using kerning) |
| will be achieved with TrueType fonts: see |
| \url{http://www.freedesktop.org/software/fontconfig/fontconfig-user.html} |
| for ways to set up your system to prefer them. The default family |
| (\code{"Helvetica"}) is likely not to use kerning: alternatives which |
| should if you have them installed are \code{"Arial"}, |
| \code{"DejaVu Sans"} and \code{"Liberation Sans"} (and perhaps |
| \code{"FreeSans"}). For those who prefer fonts with serifs, try |
| \code{"Times New Roman"}, \code{"DejaVu Serif"} and \code{"Liberation |
| Serif"}. To match LaTeX text, use something like \code{"CM Roman"}. |
| |
| % https://bugs.launchpad.net/ubuntu/+source/fontconfig/+bug/551977 |
| Problems with incorrect rendering of symbols (e.g., of |
| \code{quote(pi)} and \code{expression(10^degree)}) |
| have been seen on Linux systems which have the Wine |
| symbol font installed -- \code{fontconfig} then prefers this and |
| misinterprets its encoding. Adding the following lines |
| to \file{~/.fonts.conf} or \file{/etc/fonts/local.conf} may circumvent |
| this problem by preferring the URW Type 1 symbol font. |
| \preformatted{<fontconfig> |
| <match target="pattern"> |
| <test name="family"><string>Symbol</string></test> |
| <edit name="family" mode="prepend" binding="same"> |
| <string>Standard Symbols L</string> |
| </edit> |
| </match> |
| </fontconfig> |
| } |
| A test for this is to run at the command line \command{fc-match Symbol}. |
| If that shows \code{symbol.ttf} that may be the Wine symbol font -- use |
| \command{locate symbol.ttf} to see if it is found from a directory with |
| \samp{wine} in the name. |
| } |
| |
| \section{Resources}{ |
| The standard X11 resource \code{geometry} can be used to specify the |
| window position and/or size, but will be overridden by values |
| specified as arguments or non-\code{NA} defaults set in |
| \code{X11.options}. The class looked for is \code{R_x11}. Note that |
| the resource specifies the width and height in pixels and not in |
| inches. See for example \samp{man X} (or |
| \url{https://www.x.org/releases/current/}). |
| An example line in \file{~/.Xresources} might be |
| \preformatted{R_x11*geometry: 900x900-0+0 |
| } |
| which specifies a 900 x 900 pixel window at the top right of the screen. |
| } |
| |
| \section{Colour Rendering}{ |
| X11 supports several \sQuote{visual} types, and nowadays almost all |
| systems support \sQuote{truecolor} which \code{X11} will use by |
| default. This uses a direct specification of any RGB colour up to the |
| depth supported (usually 8 bits per colour). Other visuals make use |
| of a palette to support fewer colours, only grays or even only |
| black/white. The palette is shared between all X11 clients, so it can |
| be necessary to limit the number of colours used by \R. |
| |
| The default for \code{type = "Xlib"} is to use the best possible colour |
| model for the visual of the X11 server: these days this will almost |
| always be \sQuote{truecolor}. This can be overridden by the |
| \code{colortype} argument of \code{X11.options}. \bold{Note:} All |
| \code{X11} and \code{type = "Xlib"} \code{\link{bmp}}, \code{jpeg}, |
| \code{png} and \code{tiff} devices share a \code{colortype} which is |
| set when the first device to be opened. To change the |
| \code{colortype} you need to close \emph{all} open such devices, and |
| then use \code{X11.options(colortype =)}. |
| |
| The colortype types are tried in the order \code{"true"}, |
| \code{"pseudo"}, \code{"gray"} and \code{"mono"} (black or white |
| only). The values \code{"pseudo"} and \code{"pseudo.cube"} provide |
| two colour strategies for a pseudocolor visual. The first strategy |
| provides on-demand colour allocation which produces exact colours |
| until the colour resources of the display are exhausted (when plotting |
| will fail). The second allocates (if possible) a standard colour |
| cube, and requested colours are approximated by the closest value in |
| the cube. |
| |
| With \code{colortype} equal to \code{"pseudo.cube"} or \code{"gray"} |
| successively smaller palettes are tried until one is completely |
| allocated. If allocation of the smallest attempt fails the device will |
| revert to \code{"mono"}. For \code{"gray"} the search starts at 256 |
| grays for a display with depth greater than 8, otherwise with half |
| the available colours. For \code{"pseudo.cube"} the maximum cube size |
| is set by \code{X11.options(maxcolorsize =)} and defaults to |
| 256. With that setting the largest cube tried is 4 levels each for |
| RGB, using 64 colours in the palette. |
| |
| % A test in 2011 showed that cairo >= 1.6 works on 8-bit visuals, |
| % but does not interpret colours correctly. Done via VNC. |
| The cairographics-based devices most likely only work (or work |
| correctly) with \sQuote{TrueColor} visuals, although in principle this |
| depends on the cairo installation: a warning is given if any other |
| visual is encountered. |
| |
| \code{type = "Xlib"} supports \sQuote{TrueColor}, |
| \sQuote{PseudoColor}, \sQuote{GrayScale}, \code{StaticGray} and |
| \code{MonoChrome} visuals: \sQuote{StaticColor} and |
| \sQuote{DirectColor} visuals are handled only in black/white. |
| } |
| |
| \section{Anti-aliasing}{ |
| Anti-aliasing is only supported for cairographics-based devices, and |
| applies to both graphics and fonts. It is generally preferable for |
| lines and text, but can lead to undesirable effects for fills, |
| e.g.\sspace{}for \code{\link{image}} plots, and so is never used for fills. |
| |
| \code{antialias = "default"} is in principle platform-dependent, but |
| seems most often equivalent to \code{antialias = "gray"}. |
| } |
| |
| \section{Conventions}{ |
| This section describes the implementation of the conventions for |
| graphics devices set out in the \dQuote{R Internals Manual}. |
| |
| \itemize{ |
| \item The default device size is 7 inches square. |
| \item Font sizes are in big points. |
| \item The default font family is Helvetica. |
| \item Line widths in 1/96 inch, minimum one pixel for \code{type = |
| "Xlib"}, 0.01 otherwise. |
| \item For \code{type = "Xlib"} circle radii are in pixels with |
| minimum one. |
| \item Colours are interpreted by the X11 server, which is |
| \emph{assumed} to conform to sRGB. |
| } |
| } |
| |
| \seealso{ |
| \code{\link{Devices}}, \code{\link{X11Fonts}}, \code{\link{savePlot}}. |
| } |
| \examples{\dontrun{ |
| if(.Platform$OS.type == "unix") { # Only on unix-alikes, possibly Mac, |
| ## put something like this is your .Rprofile to customize the defaults |
| setHook(packageEvent("grDevices", "onLoad"), |
| function(...) grDevices::X11.options(width = 8, height = 6, xpos = 0, |
| pointsize = 10)) |
| }}} |
| \keyword{device} |