Menu

Функция plot() в R: типы, цвета, pch и легенды

Как работает функция plot() в R — типы графиков, заголовки и подписи осей, цвета, символы точек (pch), наслоение через lines() и abline() и легенды.

На этой странице есть исполняемые редакторы: меняйте, запускайте и сразу видите результат.

plot() — универсальная функция построения графиков в R

Чтобы построить график в R, вызовите plot(x, y) с двумя числовыми векторами одинаковой длины. R нарисует по точке на каждую пару — первый вектор по горизонтальной оси, второй по вертикальной — и автоматически подпишет оси именами переменных:

x <- 1:12
y <- c(2, 5, 4, 8, 9, 12, 11, 15, 14, 18, 17, 21)

plot(x, y)

Результат — россыпь из двенадцати полых кружков, устойчиво поднимающихся с ростом x. Это вся входная плата: ничего устанавливать не нужно, никакой настройки. plot() поставляется с базовым R и стоит за большей частью быстрой разведочной графики.

Поскольку исполнитель кода на этой странице показывает только текстовый вывод, вызовы построения графиков в этой статье приведены статичными сниппетами — вставьте их в RStudio или любую локальную сессию R, чтобы увидеть картинки. А запустить здесь можно подготовку данных. Это в любом случае хорошая привычка: посмотрите на числа, прежде чем их рисовать.

Если передать только один вектор, plot(y) использует индексные позиции 1, 2, 3, ... в качестве горизонтальной оси — удобно, чтобы быстро взглянуть на последовательность измерений.

Выбор типа графика

Аргумент type решает, как рисуются пары:

plot(x, y, type = "p")   # points (the default)
plot(x, y, type = "l")   # a connected line
plot(x, y, type = "b")   # both: points joined by line segments
plot(x, y, type = "h")   # vertical bars from zero, like a spike chart
plot(x, y, type = "s")   # a step function

type = "l" превращает диаграмму рассеяния в линейный график — то, что нужно для всего измеряемого во времени. type = "b" сохраняет видимость отдельных наблюдений, всё же показывая тренд. type = "h" рисует тонкий вертикальный отрезок от нуля до каждого значения, а type = "s" рисует лестницу, удерживающую каждое значение до следующего, — полезно для величин, меняющихся скачками, вроде цены или остатка на складе.

Заголовки, подписи и цвета

График без подписей — это личная заметка самому себе. Три аргумента это исправляют: main для заголовка, xlab и ylab для подписей осей. col задаёт цвет:

plot(x, y,
     type = "b",
     main = "Monthly signups",
     xlab = "Month",
     ylab = "Signups (thousands)",
     col  = "steelblue")

col принимает три вида значений:

  • Именованные цвета"red", "steelblue", "tomato", "darkgreen". R знает 657 из них; выполните colors(), чтобы вывести все имена.
  • Шестнадцатеричные кодыcol = "#2C7FB8", ровно как в CSS.
  • Вектор цветов — по одному на точку; так раскрашивают точки по группам: col = c("tomato", "steelblue")[group], где group — фактор.

Символы точек через pch, размеры через cex и lwd

Полый круг по умолчанию годится для разведки, но мутноват в том, что вы показываете другим. pch (plotting character) выбирает символ, пронумерованный от 0 до 25:

plot(x, y, pch = 19)                     # solid circle - the usual choice
plot(x, y, pch = 17)                     # solid triangle
plot(x, y, pch = 21, col = "black",
     bg = "gold")                        # fillable circle: border + fill

Два числа стоит запомнить. pch = 19 — закрашенный круг, который используется в большинстве готовых графиков. pch с 21 по 25 — заливаемые символы: col красит границу, а bg красит внутренность, так что получаются двухцветные точки.

У размера и стиля линии свои регуляторы:

  • cex масштабирует размер точек: cex = 1.5 делает точки в полтора раза больше.
  • lwd задаёт толщину линии для type = "l" или "b": lwd = 2 даёт плотную, читаемую линию.
  • lty задаёт узор линии: lty = 1 сплошная, 2 штриховая, 3 пунктирная.

Наслоение: points(), lines() и abline()

plot() начинает новый график. Чтобы рисовать поверх существующего, используйте его спутников — они добавляют к текущему графику, а не заменяют его:

plot(x, y, type = "l", lwd = 2, col = "steelblue",
     main = "Actual vs. target")

points(x, y, pch = 19, col = "steelblue")   # add the observations
lines(x, x * 1.5, lty = 2, col = "gray40")  # add a second series, dashed
abline(h = 10, col = "tomato")              # horizontal reference line at y = 10

abline() — инструмент опорных линий, и у него три режима:

  • abline(h = 10) — горизонтальная линия на заданном значении вертикальной оси.
  • abline(v = 6) — вертикальная линия на заданном значении горизонтальной оси.
  • abline(a = 0, b = 1.5) — прямая по свободному члену a и наклону b.

Его лучший трюк: передайте ему подогнанную модель — и он нарисует линию регрессии за вас: abline(lm(y ~ x)). Эта одна строка превращает диаграмму рассеяния в аргумент; на ней строится руководство по диаграммам рассеяния.

Одно правило, которое нужно уважать: пределы осей фиксируются первым вызовом plot(). Если наслаиваемый ряд выходит за них, он обрежется — задавайте xlim = и ylim = в исходном plot() достаточно щедро для всего, что планируете добавить.

Добавление легенды

Как только на графике больше одного ряда, ему нужна легенда. legend() принимает первым аргументом ключевое слово позиции — "topright", "topleft", "bottomright", "bottomleft", "top", "bottom" или "center" (это литеральные строки R, поэтому в вашем коде они остаются на английском), — а затем подписи и соответствующие стили:

legend("topright",
       legend = c("Actual", "Target"),
       col    = c("steelblue", "gray40"),
       lty    = c(1, 2),
       pch    = c(19, NA),
       lwd    = 2)

Векторы col, lty и pch должны соответствовать legend запись в запись — первая подпись получает первый цвет и так далее. Используйте NA для стиля, неприменимого к ряду (здесь у линии цели нет точек). Ключевое слово прижимает рамку к углу области графика; выбирайте тот угол, который ваши данные оставили пустым.

Несколько панелей и сохранение в файл

Чтобы показать несколько графиков на одном рисунке, задайте сетку до рисования: par(mfrow = c(1, 2)) делит устройство на одну строку и два столбца, а следующие два вызова plot() заполняют панели по порядку. Сбросьте через par(mfrow = c(1, 1)), когда закончите, иначе последующие графики так и останутся крошечными.

Сохранение в файл работает через перенаправление рисования на файловое устройство вместо экрана:

png("signups.png", width = 800, height = 600)

plot(x, y, type = "b", pch = 19, col = "steelblue",
     main = "Monthly signups", xlab = "Month", ylab = "Signups")

dev.off()

Всё между png() и dev.off() попадает в файл; на экране не появляется ничего. Забытый dev.off() — классический баг: файл остаётся заблокированным и пустым, пока вы не закроете устройство. pdf(), jpeg() и svg() работают так же.

Что вы уносите с собой

  • plot(x, y) рисует немедленно; type = переключает между точками ("p"), линиями ("l") и обоими ("b").
  • main, xlab, ylab подписывают график; col принимает имена цветов (657 штук в colors()) или шестнадцатеричные коды.
  • pch = 19 — закрашенный круг; pch = 2125 разделяют границу (col) и заливку (bg); cex, lwd, lty управляют размером и стилем линии.
  • points(), lines() и abline() наслаиваются на существующий график — abline(lm(y ~ x)) добавляет линию регрессии одним вызовом.
  • legend("topright", ...) подписывает ряды; png(...) + dev.off() сохраняет в файл.

Дальше: гистограмма — одномерный график, к которому вы потянетесь первым при знакомстве с новым набором данных.

Часто задаваемые вопросы

Как построить график в R?

Вызовите plot(x, y) с двумя числовыми векторами одинаковой длины. R откроет графическое окно и нарисует по точке на пару. Добавьте type = "l" для линейного графика, main, xlab и ylab для подписей и col для цвета.

Что означает pch в R?

pch (plotting character) задаёт символ точки, пронумерованный от 0 до 25. pch = 19 — закрашенный круг, который нужен большинству. У символов с 21 по 25 есть отдельная заливка: col задаёт границу, а bg — внутреннюю часть.

Как добавить легенду на график в R?

Вызовите legend() после построения графика, указав первым аргументом ключевое слово позиции вроде "topright", вектор подписей legend = и соответствующие значения col, pch или lty, которые вы использовали на графике.

Как сохранить график R в файл?

Откройте файловое устройство перед построением и закройте после: png("myplot.png", width = 800, height = 600), затем ваш код графика, затем dev.off(). На экране ничего не появится — график уйдёт прямо в файл.

Coddy programming languages illustration

Учитесь программировать с Coddy

НАЧАТЬ