Wykres słupkowy i histogram w języku R (z przykładem)

Wykres słupkowy to świetny sposób na przedstawienie zmiennych kategorycznych na osi X. Ten typ wykresu przedstawia dwa aspekty na osi Y.

  1. Pierwsza zlicza liczbę wystąpień pomiędzy grupami.
  2. Drugi pokazuje statystykę podsumowującą (min., maks., średnia itd.) zmiennej na osi Y.

Użyjesz zestawu danych mtcars zawierającego następujące zmienne:

  • cyl: Liczba cylindrów w samochodzie. Zmienna numeryczna
  • am: Typ skrzyni biegów. 0 dla automatycznej i 1 dla ręcznej. Zmienna numeryczna
  • mpg: mile na galon. Zmienna numeryczna

Jak utworzyć wykres słupkowy

Aby utworzyć wykres w R, możesz skorzystać z biblioteki ggplot, która tworzy wykresy gotowe do publikacji. Podstawowa składnia tej biblioteki jest następująca:

ggplot(data, mapping = aes()) +
geometric object 

arguments: 
data: dataset used to plot the graph 
mapping: Control the x and y-axis 
geometric object: The type of plot you want to show. The most common objects are:

- Point: `geom_point()`
- Bar: `geom_bar()`
- Line: `geom_line()`
- Histogram: `geom_histogram()` 

W tym samouczku interesuje Cię obiekt geometryczny geom_bar(), który tworzy wykres słupkowy.

Wykres słupkowy: liczba

Twój pierwszy wykres pokazuje częstotliwość cylindra za pomocą geom_bar(). Poniższy kod jest najbardziej podstawową składnią.

library(ggplot2)
# Most basic bar chart
ggplot(mtcars, aes(x = factor(cyl))) +
    geom_bar()

Objaśnienie kodu

  • Przekazujesz zbiór danych mtcars do ggplot.
  • Wewnątrz argumentu aes() dodajesz oś x jako zmienną czynnikową (cyl)
  • Znak + oznacza, że ​​chcesz, aby R nadal czytał kod. Kod staje się bardziej czytelny, ponieważ go łamie.
  • Użyj geom_bar() dla obiektu geometrycznego.

Wyjście:

Wykres słupkowy: liczba

Note: upewnij się, że konwertujesz zmienne na czynnik, w przeciwnym razie R traktuje zmienne jako numeryczne. Zobacz poniższy przykład.

Wykres słupkowy: liczba

Dostosuj wykres

Aby dostosować wykres, można przekazać cztery argumenty:

- `stat`: Control the type of formatting. By default, `bin` to plot a count in the y-axis. For continuous value, pass `stat = "identity"`
- `alpha`: Control density of the color
- `fill`: Change the color of the bar
- `size`: Control the size the bar	

Zmień kolor pasków

Możesz zmienić kolor pasków. Należy pamiętać, że kolory pasków są wszystkie podobne.

# Change the color of the bars
ggplot(mtcars, aes(x = factor(cyl))) +
    geom_bar(fill = "coral") +
    theme_classic()

Objaśnienie kodu

  • Kolory słupków są kontrolowane przez mapowanie aes() wewnątrz obiektu geometrycznego (tzn. nie w ggplot()). Kolor można zmienić za pomocą argumentów wypełnienia. Tutaj wybierasz kolor koralowy.

Wyjście:

Zmień kolor pasków

Możesz użyć tego kodu:

grDevices::colors()

aby zobaczyć wszystkie kolory dostępne w R. Dostępnych jest około 650 kolorów.

Zmień intensywność

Możesz zwiększyć lub zmniejszyć intensywność koloru pasków

# Change intensity
ggplot(mtcars,
        aes(factor(cyl))) +
    geom_bar(fill = "coral",
        alpha = 0.5) +
    theme_classic()

Objaśnienie kodu

  • Aby zwiększyć/zmniejszyć intensywność paska, możesz zmienić wartość alfa. Duża alfa zwiększa intensywność, a niska alfa zmniejsza intensywność. alfa waha się od 0 do 1. Jeśli 1, to kolor jest taki sam jak paleta. Jeśli 0, kolor jest biały. Wybierasz alfa = 0.1.

Wyjście:

Zmień intensywność

Koloruj według grup

Możesz zmieniać kolory pasków, co oznacza inny kolor dla każdej grupy. Na przykład zmienna cyl ma trzy poziomy, wówczas można wykreślić wykres słupkowy za pomocą trzech kolorów.

# Color by group
ggplot(mtcars, aes(factor(cyl),
        fill = factor(cyl))) +
    geom_bar()

Objaśnienie kodu

  • Argument fill wewnątrz aes() umożliwia zmianę koloru paska. Zmieniasz kolor, ustawiając zmienną fill = x-axis. W twoim przykładzie zmienna osi x to cyl; wypełnienie = współczynnik (cyl)

Wyjście:

Koloruj według grup

Dodaj grupę w paskach

Możesz dalej podzielić oś Y na podstawie innego poziomu czynnika. Na przykład możesz policzyć liczbę automatycznych i manualnych skrzyń biegów na podstawie typu cylindra.

Będziesz postępować w następujący sposób:

  • Krok 1: Utwórz ramkę danych ze zbiorem danych mtcars
  • Krok 2: Oznacz zmienną am jako auto dla automatycznej skrzyni biegów i man dla manualnej skrzyni biegów. Przekształć am i cyl jako czynnik, aby nie trzeba było używać factor() w funkcji ggplot().
  • Krok 3: Narysuj wykres słupkowy, aby policzyć liczbę skrzyń biegów według cylindra
library(dplyr)
# Step 1
data <- mtcars % > % 
#Step 2
mutate(am = factor(am, labels = c("auto", "man")),
    cyl = factor(cyl))

Masz gotowy zbiór danych, możesz wykreślić wykres;

# Krok 3

ggplot(data, aes(x = cyl, fill = am)) +
    geom_bar() +
    theme_classic()

Objaśnienie kodu

  • Funkcja ggpplot() zawiera dane zbioru danych, a funkcja aes().
  • W aes() dołączasz zmienną osi x i określasz, która zmienna jest wymagana do wypełnienia paska (np. am)
  • geom_bar(): Utwórz wykres słupkowy

Wyjście:

Dodaj grupę w paskach

Mapowanie wypełni pasek dwoma kolorami, po jednym dla każdego poziomu. Zmiana grupy poprzez wybranie innych zmiennych czynnikowych w zbiorze danych jest łatwa.

Wykres słupkowy w procentach

Możesz wizualizować pasek w procentach zamiast surowej liczby.

# Wykres słupkowy w procentach

ggplot(data, aes(x = cyl, fill = am)) +
    geom_bar(position = "fill") +
    theme_classic()

Objaśnienie kodu

  • Użyj pozycji = „wypełnij” w argumencie geom_bar(), aby utworzyć grafikę z procentami na osi Y.

Wyjście:

Wykres słupkowy w procentach

Paski obok siebie

Wykres słupkowy ze zmienną grupową można łatwo wykreślić obok siebie.

# Bar chart side by side
ggplot(data, aes(x = cyl, fill = am)) +
    geom_bar(position = position_dodge()) +
    theme_classic()

Objaśnienie kodu

  • position=position_dodge(): Jawnie mówi, jak rozmieścić słupki

Wyjście:

Bary obok siebie

Histogram

W drugiej części tutoriala o wykresie słupkowym możesz przedstawić grupę zmiennych za pomocą wartości na osi Y.

Twoim celem jest utworzenie wykresu przedstawiającego średnią milę na galon dla każdego typu cylindra. Aby narysować wykres informacyjny, wykonaj następujące kroki:

  • Krok 1: Utwórz nową zmienną ze średnią milą na galon na cylinder
  • Krok 2: Utwórz podstawowy histogram
  • Krok 3: Zmień orientację
  • Krok 4: Zmień kolor
  • Krok 5: Zmień rozmiar
  • Krok 6: Dodaj etykiety do wykresu

Krok 1) Utwórz nową zmienną

Tworzysz ramkę danych o nazwie data_histogram, która po prostu zwraca średnią liczbę mil na galon na podstawie liczby cylindrów w samochodzie. Nazywasz tę nową zmienną mean_mpg i zaokrąglasz średnią do dwóch miejsc po przecinku.

# Krok 1

data_histogram <- mtcars % > %
mutate(cyl = factor(cyl)) % > %
group_by(cyl) % > %
summarize(mean_mpg = round(mean(mpg), 2))

Krok 2) Utwórz podstawowy histogram

Możesz narysować histogram. Nie jest gotowy do komunikacji i dostarczenia go klientowi, ale daje nam intuicję dotyczącą trendu.

ggplot(data_histogram, aes(x = cyl, y = mean_mpg)) +
    geom_bar(stat = "identity")

Objaśnienie kodu

  • Funkcja aes() ma teraz dwie zmienne. Zmienna cyl odnosi się do osi x, a średnia_mpg jest osią y.
  • Należy przekazać argument stat=”identity”, aby odnieść się do zmiennej na osi Y jako wartości liczbowej. geom_bar używa stat=”bin” jako wartości domyślnej.

Wyjście:

Histogram

Krok 3) Zmień orientację

Zmieniasz orientację wykresu z pionowej na poziomą.

ggplot(data_histogram, aes(x = cyl, y = mean_mpg)) +
    geom_bar(stat = "identity") +
    coord_flip()

Objaśnienie kodu

  • Możesz kontrolować orientację wykresu za pomocą coord_flip().

Wyjście:

Histogram

Krok 4) Zmień kolor

Kolory słupków można różnicować w zależności od poziomu współczynnika zmiennej osi X.

ggplot(data_histogram, aes(x = cyl, y = mean_mpg, fill = cyl)) +
    geom_bar(stat = "identity") +
    coord_flip() +
    theme_classic()

Objaśnienie kodu

  • Możesz narysować wykres według grup za pomocą mapowania fill=cyl. R automatycznie dba o kolory w oparciu o poziomy zmiennej cyl

Wyjście:

Histogram

Krok 5) Zmień rozmiar

Aby wykres wyglądał ładniej, zmniejszasz szerokość słupka.

graph <- ggplot(data_histogram, aes(x = cyl, y = mean_mpg, fill = cyl)) +
    geom_bar(stat = "identity",
        width = 0.5) +
    coord_flip() +
    theme_classic()

Objaśnienie kodu

  • Argument szerokości wewnątrz funkcji geom_bar() steruje rozmiarem paska. Większa wartość zwiększa szerokość.
  • Uwaga: przechowujesz wykres na wykresie zmiennych. Robisz to, ponieważ następny krok nie zmieni kodu wykresu zmiennych. Poprawia czytelność kodu.

Wyjście:

Histogram

Krok 6) Dodaj etykiety do wykresu

Ostatni krok polega na dodaniu w etykiecie wartości zmiennej mean_mpg.

graph +
    geom_text(aes(label = mean_mpg),
        hjust = 1.5,
        color = "white",
        size = 3) +
    theme_classic()

Objaśnienie kodu

  • Funkcja geom_text() jest przydatna do kontrolowania estetyki tekstu.
    • label=: Dodaj etykietę wewnątrz pasków
    • mean_mpg: Użyj zmiennej mean_mpg jako etykiety
  • hjust kontroluje położenie etykiety. Wartości zamknięte do 1 wyświetlają etykietę na górze paska, a wyższe wartości przesuwają etykietę na dół. Jeśli orientacja wykresu jest pionowa, zmień hjust na vjust.
  • color=”white”: Zmień kolor tekstu. Tutaj używasz koloru białego.
  • size=3: Ustaw rozmiar tekstu.

Wyjście:

Histogram

Podsumowanie

Wykres słupkowy jest przydatny, gdy oś x jest zmienną kategoryjną. Oś y może być albo liczbą, albo statystyką podsumowującą. Poniższa tabela podsumowuje, jak kontrolować wykres słupkowy za pomocą ggplot2:

Cel Code
Liczyć
ggplot(df, eas(x= factor(x1)) + geom_bar()
Policz z innym kolorem wypełnienia
ggplot(df, eas(x= factor(x1), fill = factor(x1))) + geom_bar()
Policz grupami, ułożonymi w stos
ggplot(df, eas(x= factor(x1), fill = factor(x2))) + geom_bar(position=position_dodge())
Licz w grupach, obok siebie
ggplot(df, eas(x= factor(x1), fill = factor(x2))) + geom_bar()
Liczenie z grupami, ułożone w%
ggplot(df, eas(x= factor(x1), fill = factor(x2))) + geom_bar(position=position_dodge())
Wartości
ggplot(df, eas(x= factor(x1)+ y = x2) + geom_bar(stat="identity")