Menu

Funkcja plot() w R: typy wykresów, kolory, pch i legendy

Jak działa funkcja plot() w R: typy wykresów, tytuły i etykiety osi, kolory, symbole punktów (pch), nakładanie warstw przez lines() i abline() oraz legendy.

Na tej stronie są działające edytory: edytuj, uruchamiaj i od razu zobacz wynik.

plot() to uniwersalna funkcja do wykresów w R

Żeby narysować wykres w R, wywołaj plot(x, y) z dwoma liczbowymi wektorami tej samej długości. R rysuje jeden punkt dla każdej pary (pierwszy wektor na osi poziomej, drugi na pionowej) i automatycznie podpisuje osie nazwami zmiennych:

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

plot(x, y)

Wynikiem jest dwanaście pustych kółek, które równomiernie wspinają się w górę wraz ze wzrostem x. To cała opłata wstępna: żadnych pakietów do instalowania, żadnej konfiguracji. plot() jest częścią bazowego R i stoi za większością szybkich wykresów eksploracyjnych.

Edytor na tej stronie pokazuje tylko wyjście tekstowe, więc wywołania rysujące w tym artykule są statycznymi fragmentami: wklej je do RStudio albo dowolnej lokalnej sesji R, żeby zobaczyć obrazki. Tutaj możesz za to uruchomić przygotowanie danych. To i tak dobry nawyk: popatrz na liczby, zanim zrobisz z nich wykres.

Jeśli przekażesz tylko jeden wektor, plot(y) użyje numerów pozycji 1, 2, 3, ... jako osi poziomej. To wygodne do szybkiego podglądu ciągu pomiarów.

Wybór typu wykresu

Argument type decyduje, jak rysowane są pary:

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" zamienia chmurę punktów w wykres liniowy, czyli to, czego chcesz dla wszystkiego, co mierzy się w czasie. type = "b" zostawia widoczne pojedyncze obserwacje, a jednocześnie pokazuje trend. type = "h" rysuje cienki pionowy odcinek od zera do każdej wartości, a type = "s" rysuje schodki, które trzymają każdą wartość aż do następnej. Przydaje się to przy wielkościach zmieniających się skokowo, takich jak cena albo stan magazynu.

Tytuły, etykiety i kolory

Wykres bez etykiet to prywatna notatka dla samego siebie. Naprawiają to trzy argumenty: main dla tytułu, xlab i ylab dla etykiet osi. col ustawia kolor:

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

col przyjmuje trzy rodzaje wartości:

  • Nazwy kolorów: "red", "steelblue", "tomato", "darkgreen". R zna ich 657; uruchom colors(), żeby zobaczyć wszystkie nazwy.
  • Kody hex: col = "#2C7FB8", dokładnie jak w CSS.
  • Wektor kolorów: jeden na punkt. Tak koloruje się punkty według grup: col = c("tomato", "steelblue")[group], gdzie group to czynnik.

Symbole punktów przez pch, rozmiary przez cex i lwd

Domyślne puste kółko wystarczy do eksploracji, ale jest mętne w czymkolwiek, co pokazujesz innym. pch (plotting character) wybiera symbol, ponumerowany od 0 do 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

Dwie liczby warto zapamiętać. pch = 19 to pełne kółko, którego używa większość gotowych wykresów. pch = 21 do 25 to symbole z wypełnieniem: col koloruje obramowanie, a bg wnętrze, więc dostajesz punkty dwukolorowe.

Rozmiar i styl linii mają własne pokrętła:

  • cex skaluje rozmiar punktów: cex = 1.5 powiększa punkty o połowę.
  • lwd ustawia grubość linii dla type = "l" albo "b": lwd = 2 daje wyraźną, czytelną linię.
  • lty ustawia wzór linii: lty = 1 ciągła, 2 kreskowana, 3 kropkowana.

Warstwy: points(), lines() i abline()

plot() zaczyna nowy wykres. Żeby rysować na istniejącym, użyj jego towarzyszy: dodają elementy do bieżącego wykresu, zamiast go zastępować:

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() to narzędzie do linii odniesienia i ma trzy tryby:

  • abline(h = 10): pozioma linia na danej wartości osi pionowej.
  • abline(v = 6): pionowa linia na danej wartości osi poziomej.
  • abline(a = 0, b = 1.5): prosta o wyrazie wolnym a i nachyleniu b.

Jej najlepsza sztuczka: przekaż jej dopasowany model, a narysuje za ciebie linię regresji, abline(lm(y ~ x)). Ta jedna linia zamienia chmurę punktów w argument; rozwija to przewodnik po wykresie punktowym.

Jedna zasada, której trzeba przestrzegać: zakresy osi ustala pierwsze wywołanie plot(). Jeśli dokładana seria wychodzi poza nie, zostaje przycięta, więc w pierwotnym plot() ustaw xlim = i ylim = na tyle szeroko, żeby zmieściło się wszystko, co planujesz dodać.

Dodawanie legendy

Gdy wykres ma więcej niż jedną serię, potrzebuje legendy. legend() przyjmuje jako pierwszy argument słowo określające pozycję: "topright", "topleft", "bottomright", "bottomleft", "top", "bottom" albo "center" (to dosłowne napisy R, więc w kodzie zostają po angielsku), a potem etykiety i pasujące style:

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

Wektory col, lty i pch muszą odpowiadać legend wpis po wpisie: pierwsza etykieta dostaje pierwszy kolor i tak dalej. Użyj NA dla stylu, który nie dotyczy danej serii (tutaj linia celu nie ma punktów). Słowo kluczowe przypina ramkę do rogu obszaru wykresu; wybierz róg, który twoje dane zostawiają pusty.

Wiele paneli i zapisywanie do pliku

Żeby pokazać kilka wykresów na jednej rycinie, ustaw siatkę przed rysowaniem: par(mfrow = c(1, 2)) dzieli urządzenie na jeden wiersz i dwie kolumny, a dwa kolejne wywołania plot() wypełniają panele po kolei. Po skończeniu przywróć ustawienie przez par(mfrow = c(1, 1)), bo inaczej kolejne wykresy zostaną malutkie.

Zapisywanie do pliku polega na przekierowaniu rysowania do urządzenia plikowego zamiast na ekran:

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()

Wszystko między png() a dev.off() trafia do pliku; na ekranie nic się nie pojawia. Zapomniane dev.off() to klasyczny błąd: plik zostaje zablokowany i pusty, dopóki nie zamkniesz urządzenia. pdf(), jpeg() i svg() działają tak samo.

Co warto zapamiętać

  • plot(x, y) rysuje od razu; type = przełącza między punktami ("p"), liniami ("l") i jednym i drugim ("b").
  • main, xlab, ylab opisują wykres; col przyjmuje nazwy kolorów (657 w colors()) albo kody hex.
  • pch = 19 to pełne kółko; pch = 21 do 25 rozdzielają obramowanie (col) od wypełnienia (bg); cex, lwd, lty sterują rozmiarem i stylem linii.
  • points(), lines() i abline() nakładają warstwy na istniejący wykres, a abline(lm(y ~ x)) dodaje linię regresji jednym wywołaniem.
  • legend("topright", ...) opisuje serie; png(...) + dev.off() zapisuje do pliku.

Dalej: histogram, czyli wykres jednej zmiennej, po który sięgniesz najpierw przy nowym zbiorze danych.

Najczęściej zadawane pytania

Jak narysować wykres w R?

Wywołaj plot(x, y) z dwoma wektorami liczbowymi tej samej długości. R otwiera okno graficzne i rysuje jeden punkt na każdą parę. Dodaj type = "l" dla wykresu liniowego, main, xlab i ylab dla tytułów oraz col dla koloru.

Co oznacza pch w R?

pch (plotting character) wybiera symbol punktu, ponumerowany od 0 do 25. pch = 19 to pełne kółko, którego chce większość osób. Symbole od 21 do 25 mają osobne wypełnienie: col ustawia obramowanie, a bg wnętrze.

Jak dodać legendę do wykresu w R?

Wywołaj legend() po narysowaniu wykresu, z pozycją jako pierwszym argumentem, np. "topright", wektorem etykiet legend = oraz pasującymi wartościami col, pch albo lty, których użyto na wykresie.

Jak zapisać wykres R do pliku?

Otwórz urządzenie plikowe przed rysowaniem i zamknij je po nim: png("myplot.png", width = 800, height = 600), potem kod wykresu, potem dev.off(). Na ekranie nic się nie pojawia, bo wykres trafia prosto do pliku.

Ilustracja języków programowania w Coddy

Ucz się programowania z Coddy

ZACZNIJ