# Визуализация — краткий справочник > Неочевидное поведение, подводные камни и непростые значения по умолчанию функций R. > Только то, чего Claude ещё не знает. --- ## par (подводные камни) - Настройки `par()` относятся к конкретному устройству. Открытие нового устройства всё сбрасывает. - Установка `mfrow`/`mfcol` сбрасывает `cex` в 1 и `mex` в 1. При размещении 2x2 базовое `cex` умножается на 0.83; при 3 и более строках/столбцах — на 0.66. - `mai` (дюймы), `mar` (строки), `pin`, `plt`, `pty` взаимодействуют друг с другом. Восстановление всех сохранённых параметров после изменения размера устройства может дать несогласованные результаты — побеждает последний по алфавиту. - Установка `bg` через `par()` также задаёт `new = FALSE`. Установка `fg` через `par()` также задаёт `col`. - `xpd = NA` обрезает по области устройства (позволяет рисовать на внешних полях); `xpd = TRUE` обрезает по области рисунка; `xpd = FALSE` (по умолчанию) обрезает по области графика. - `mgp = c(3, 1, 0)`: управляет строкой заголовка (`mgp[1]`), строкой подписей (`mgp[2]`), линией оси (`mgp[3]`). Всё в единицах `mex`. - `las`: 0 = параллельно оси, 1 = горизонтально, 2 = перпендикулярно, 3 = вертикально. **Не** реагирует на `srt`. - `tck = 1` рисует линии сетки через весь график. `tcl = -0.5` (по умолчанию) даёт засечки наружу. - `usr` при логарифмической шкале: содержит **log10** границ координат, а не исходные значения. - Параметры только для чтения: `cin`, `cra`, `csi`, `cxy`, `din`, `page`. --- ## layout - `layout(mat)`, где `mat` — матрица целых чисел, задающая расположение рисунков. - `widths`/`heights` принимают `lcm()` для абсолютных размеров, смешанных с относительными. - Гибче, чем `mfrow`/`mfcol`, но после установки прочитать конфигурацию нельзя (в отличие от `par("mfrow")`). - `layout.show(n)` визуализирует расположение для отладки. --- ## axis / mtext - `axis(side, at, labels)`: `side` 1=снизу, 2=слева, 3=сверху, 4=справа. - Интервал между подписями осей по умолчанию управляется `par("mgp")`. Без контроля подписи могут перекрываться. - `mtext`: аргумент `line` размещает текст по строкам поля (0 = рядом с графиком, положительное значение = наружу). `adj` управляет горизонтальным положением (0–1). - `mtext` с `outer = TRUE` пишет на **внешнем** поле (задаётся через `par(oma = ...)`). --- ## curve - Первый аргумент может быть **выражением** от `x` или функцией: `curve(sin, 0, 2*pi)` или `curve(x^2 + 1, 0, 10)`. - `add = TRUE` — для наложения на существующий график. По умолчанию `n = 101` точка вычисления. - По умолчанию `xname = "x"`; измените, если в выражении используется другое имя переменной. --- ## pairs - Функция `panel` получает `(x, y, ...)` для каждой пары. `lower.panel`, `upper.panel`, `diag.panel` — для разных областей. - `gap` управляет промежутками между панелями (по умолчанию 1). - Интерфейс формул: `pairs(~ var1 + var2 + var3, data = df)`. --- ## coplot - Условные графики: `coplot(y ~ x | a)` или `coplot(y ~ x | a * b)` для двух обусловливающих переменных. - Функцию `panel` можно настраивать; `rows`/`columns` управляют расположением. - Панель по умолчанию рисует точки; используйте `panel = panel.smooth` для наложения loess. --- ## matplot / matlines / matpoints - Строит графики столбцов одной матрицы относительно столбцов другой. Циклически повторяет `col`, `lty`, `pch` для столбцов. - По умолчанию `type = "l"` (в отличие от `plot`, где по умолчанию `"p"`). - Полезно для одновременного отображения нескольких временных рядов или подобранных кривых. --- ## contour / filled.contour / image - `contour(x, y, z)`: `z` должна быть матрицей с `dim = c(length(x), length(y))`. - `filled.contour` имеет нестандартное расположение — создаёт собственную область графика для цветовой шкалы. **Нельзя использовать с ней `par(mfrow)`**. Для добавления элементов требуется аргумент `plot.axes`. - `image`: отображает значения z как цветные прямоугольники. Цветовая схема по умолчанию может вводить в заблуждение; задавайте `col` явно. - Для `image` переменные `x` и `y` задают **границы ячеек** или **середины** в зависимости от контекста. --- ## persp - `persp(x, y, z, theta, phi)`: `theta` = азимутальный угол, `phi` = полярный угол. - Возвращает **матрицу преобразования** (невидимо) для проекции 3D в 2D — используйте `trans3d()` для добавления точек/линий на перспективный график. - `shade` и `col` управляют затенением поверхности. `border = NA` убирает линии сетки. --- ## segments / arrows / rect / polygon - Все принимают векторизованные координаты; при необходимости циклически повторяют значения. - `arrows`: `code = 1` (наконечник в начале), `code = 2` (наконечник в конце, по умолчанию), `code = 3` (с обоих концов). - `polygon`: последняя точка автоматически соединяется с первой. Заливка через `col`; `border` управляет контуром. - `rect(xleft, ybottom, xright, ytop)` — обратите внимание: порядок аргументов отличается от других систем. --- ## dev / dev.off / dev.copy - `dev.new()` открывает новое устройство. `dev.off()` закрывает текущее устройство (и сбрасывает вывод для файловых устройств, таких как `pdf`). - `dev.off()` для **последнего** открытого устройства возвращает к нулевому устройству. - `dev.copy(pdf, file = "plot.pdf")`, затем `dev.off()` — для сохранения текущего графика. - `dev.list()` возвращает все открытые устройства; `dev.cur()` — активное. --- ## pdf - Для завершения записи файла необходимо вызвать `dev.off()`. Без этого файл может быть пустым/повреждённым. - `onefile = TRUE` (по умолчанию): несколько страниц в одном PDF. `onefile = FALSE`: по одному файлу на страницу (использует `%d` в имени файла для нумерации). - Рекомендуется `useDingbats = FALSE`, чтобы избежать проблем с некоторыми средствами просмотра PDF и символами pch. - Размер по умолчанию: 7x7 дюймов. `family` управляет семейством шрифта. --- ## png / растровые устройства - `res` управляет DPI (по умолчанию 72). Для публикации: `res = 300` с подходящими `width`/`height` в пикселях или дюймах (с `units = "in"`). - `type = "cairo"` (в системах с cairo) даёт лучшее сглаживание, чем стандартный вариант. - `bg = "transparent"` — для прозрачного фона (PNG поддерживает альфа-канал). --- ## colors / rgb / hcl / col2rgb - `colors()` возвращает все 657 именованных цветов. `col2rgb("color")` возвращает матрицу RGB. - `rgb(r, g, b, alpha, maxColorValue = 255)` — обратите внимание: по умолчанию `maxColorValue` равен 1, а не 255. - `hcl(h, c, l)`: перцептивно равномерное цветовое пространство. Предпочтительно для цветовых шкал. - `adjustcolor(col, alpha.f = 0.5)`: простой способ добавить прозрачность. --- ## colorRamp / colorRampPalette - `colorRamp` возвращает **функцию**, отображающую [0,1] в матрицу RGB. - `colorRampPalette` возвращает **функцию**, принимающую `n` и возвращающую `n` интерполированных цветов. - `space = "Lab"` даёт более равномерную по восприятию интерполяцию, чем `"rgb"`. --- ## palette / recordPlot - `palette()` возвращает текущую палитру (по умолчанию 8 цветов). `palette("Set1")` устанавливает встроенную палитру. - Целочисленные значения цвета на графиках индексируют палитру (с циклическим повторением). Индекс 0 = цвет фона. - `recordPlot()` / `replayPlot()`: сохраняют и восстанавливают полный график — зависят от устройства и ненадёжны между сессиями.