Wykres słupkowy i histogram w R z przykładem

⚡ Inteligentne podsumowanie

Wykres słupkowy i histogram w R są tworzone za pomocą ggplot2, z użyciem funkcji geom_bar() do liczenia kategorii i funkcji geom_histogram() do rozkładów ciągłych. Ten przewodnik dostosowuje kolor, grupę i…ping, układanie w stosy, orientacja, binowanie i etykiety wewnątrz paska w zestawie danych mtcars.

  • 📊 Najważniejsze wyróżnienie: Wykres słupkowy podsumowuje zmienną kategorialną, natomiast histogram dzieli pojedynczą zmienną ciągłą na przedziały.
  • 🧱 Gramatyka grafiki: Każdy wykres łączy zbiór danych, mapę aes()pingi obiekt geometryczny połączony znakiem plus.
  • 🎨 Kontrola koloru: Umieść wypełnienie wewnątrz funkcji geom_bar(), aby uzyskać jednolity kolor, a wewnątrz funkcji aes(), aby kolorować paski według grupy.
  • 📐 Regulacja pozycji: position = “fill” zamienia wartości na procenty, a position_dodge() umieszcza zgrupowane paski obok siebie.
  • 🔢 Wykreślanie wartości: Pass stat = „tożsamość” gdy oś Y zawiera już obliczoną statystykę, np. średnią grupy.
  • 📏 Binning histogramu: Ustaw przedziały lub szerokość przedziału w geom_histogram(), ponieważ domyślna wartość 30 przedziałów rzadko odpowiada danym.

Histogram wykresu słupkowego w R

Czym jest wykres słupkowy w R?

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

  1. Pierwszy zlicza liczbę wystąpień w każdej grupie.
  2. Drugi wykres pokazuje statystykę podsumowującą (minimum, maksimum, średnia itd.) zmiennej na osi Y.

Użyjesz zbioru danych mtcars, który zawiera 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

Ponieważ histogramy wyglądają podobnie, warto ustalić różnice przed napisaniem jakiegokolwiek kodu.

Wykres słupkowy a histogram w R: kluczowe różnice

Te dwa wykresy wyglądają podobnie i ciągle są mylone. Odpowiadają na różne pytania i wykorzystują różne obiekty geometryczne.

kryteria Wykres słupkowy Histogram
Zmienna osi X Kategoryczny lub czynnikowy Ciągłe i numeryczne
Co reprezentuje pasek Jedna kategoria Jeden przedział lub pojemnik wartości
Odstępy między prętami Tak, kategorie są oddzielne Nie, pojemniki są obok siebie
Zamówienie barowe Można je dowolnie przearanżować Naprawiono za pomocą skali numerycznej
Pytanie odpowiedziało Jak wypadają w porównaniu grupy? Jak rozkłada się jedna zmienna?
obiekt ggplot2 geom_bar() geom_histogram()

Zasada praktyczna: jeśli zmiana kolejności słupków nadal ma sens, mamy wykres słupkowy. Jeśli zmiana kolejności zniszczyłaby ich znaczenie, mamy histogram. W przypadku podsumowań kwartylowych tej samej zmiennej ciągłej użyj fabuła pudełkowa.

Jak utworzyć wykres słupkowy w R

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 skupimy się na obiekcie geometrycznym geom_bar(), który rysuje wykres słupkowy, oraz na geom_histogram() dla danych ciągłych.

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

Code Wyjaśnienie

  • Przekazujesz zbiór danych mtcars do ggplot.
  • W argumencie aes() ustawiasz oś x na 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`: Controls what is plotted on the y-axis. By default `count`, which tallies rows. To plot a value you already computed, 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()

Code Wyjaśnienie

  • Kolory pasków są kontrolowane przez mapę aes()ping wewnątrz obiektu geometrycznego (tj. nie w ggplot()). Możesz zmienić kolor 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()

Code Wyjaśnienie

  • Aby zwiększyć/zmniejszyć intensywność paska, możesz zmienić wartość alfa. Wysoka alfa zwiększa intensywność, a niska alfa zmniejsza. Alfa waha się od 0 do 1. Przy 1 kolor idealnie pasuje do palety; przy 0 pasek jest niewidoczny. W tym przypadku wybierasz alfa = 0.5.

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

Code Wyjaśnienie

  • Argument fill w funkcji aes() zmienia kolor paska. Kolor zmienia się, ustawiając zmienną fill = oś x. W Twoim przykładzie zmienna osi x to cyl; fill = factor(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))

Mając gotowy zbiór danych, możesz narysować wykres:

# Krok 3

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

Code Wyjaśnienie

  • Wywołanie ggplot() odbiera dane zestawu danych i mapę aes()ping.
  • 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

Mapaping wypełni pasek dwoma kolorami, po jednym dla każdego poziomu. Można łatwo zmienić grupę, wybierając inne zmienne czynnikowe w zestawie danych.

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

Code Wyjaśnienie

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

Code Wyjaśnienie

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

Wyjście:

Bary obok siebie

Wykres słupkowy ze statystyką podsumowującą

W drugiej części samouczka oś Y przedstawia wartość obliczoną, a nie liczbę. Należy pamiętać, że to nadal wykres słupkowy: prawdziwy histogram jest omówiony dalej i wykorzystuje inny obiekt geometryczny.

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 on jeszcze na tyle dopracowany, aby móc go przekazać klientowi, ale już pokazuje trend.

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

Code Wyjaśnienie

  • Funkcja aes() ma teraz dwie zmienne. Zmienna cyl odnosi się do osi x, a średnia_mpg jest osią y.
  • Przekazujesz stat = “identity”, aby funkcja geom_bar() używała zmiennej osi Y bez zmian, zamiast zliczać wiersze. Domyślna wartość dla geom_bar() to stat = “count”.

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

Code Wyjaśnienie

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

Code Wyjaśnienie

  • Możesz narysować wykres według grup za pomocą mapy fill=cylping. R automatycznie dba o kolory na podstawie poziomów 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()

Code Wyjaśnienie

  • Argument szerokości w funkcji geom_bar() kontroluje grubość paska. Większa wartość sprawia, że ​​pasek staje się szerszy.
  • Wykres jest przechowywany w grafie obiektów, ponieważ w kolejnym kroku jest on ponownie wykorzystywany w niezmienionej postaci. Przechowywanie wykresów pośrednich sprawia, że ​​kod jest czytelny.

Wyjście:

Histogram

Krok 6) Dodaj etykiety do wykresu

Ostatni krok polega na dodaniu wartości mean_mpg jako etykiety wewnątrz każdego słupka.

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

Code Wyjaśnienie

  • 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
  • Zmienna hjust kontroluje położenie etykiety na pasku. Wartości bliskie 1 umieszczają ją blisko końca paska, a większe wartości przesuwają ją w kierunku osi. Jeśli wykres ma orientację pionową, zmień wartość hjust na vjust.
  • color=”white”: Zmień kolor tekstu. Tutaj używasz koloru białego.
  • size=3: Ustaw rozmiar tekstu.

Wyjście:

Histogram

Jak uporządkować i oznaczyć słupki na wykresie słupkowym w R

Dwa elementy wykończenia odróżniają wersję roboczą wykresu od wykresu gotowego do publikacji: sortowanie słupków według wartości i odpowiednie oznaczanie osi.

Zmiana kolejności pasków. ggplot2 domyślnie porządkuje poziomy czynników alfabetycznie, co rzadko jest najbardziej informatywnym porządkiem. Otocz zmienną x funkcją reorder(), aby posortować według drugiej zmiennej:

# Sort the bars from lowest to highest mean_mpg
ggplot(data_histogram, aes(x = reorder(cyl, mean_mpg), y = mean_mpg)) +
    geom_bar(stat = "identity", fill = "coral") +
    theme_classic()

Aby odwrócić kierunek, dodaj do zmiennej sortującej prefiks w postaci znaku minus, reorder(cyl, -mean_mpg.

Dodawanie tytułów i etykiet osi. Funkcja labs() ustawia każdy element tekstowy w jednym wywołaniu:

ggplot(data_histogram, aes(x = cyl, y = mean_mpg, fill = cyl)) +
    geom_bar(stat = "identity") +
    labs(title = "Average fuel economy by cylinder count",
        subtitle = "mtcars dataset",
        x = "Number of cylinders",
        y = "Mean miles per gallon",
        fill = "Cylinders",
        caption = "Source: mtcars") +
    theme_classic()

Ustaw fill = NULL wewnątrz labs(), aby całkowicie usunąć tytuł legendy, a następnie użyj theme(legend.position = “none”), aby usunąć legendę, gdy oś x już nazywa grupy.

Wybieranie własnych kolorów. Zastąp domyślną paletę paletą konkretną, tak aby wykres pasował do stylu Twojego domu:

scale_fill_manual(values = c("4" = "#0e9cd1", "6" = "coral", "8" = "grey40"))

Jak utworzyć histogram w R za pomocą geom_histogram()

Histogram pokazuje rozkład pojedynczej zmiennej ciągłej. Zamiast zliczać kategorie, ggplot2 dzieli zakres liczbowy na przedziały i liczy, ile obserwacji mieści się w każdym z nich.

library(ggplot2)
# Most basic histogram
ggplot(mtcars, aes(x = mpg)) +
    geom_histogram()

R wyświetla komunikat zalecający wybór lepszej liczby pojemników, ponieważ domyślna wartość 30 pojemników jest dowolna. Kontrolują to dwa argumenty:

  • pojemniki: liczba przedziałów, na które ma zostać podzielony zakres.
  • szerokość kosza: szerokość każdego przedziału wyrażona w jednostkach zmiennej. Użyj tego, gdy jednostki są znaczące.
# Set the number of bins
ggplot(mtcars, aes(x = mpg)) +
    geom_histogram(bins = 10, fill = "coral", color = "white") +
    theme_classic()

# Or set the width of each bin instead
ggplot(mtcars, aes(x = mpg)) +
    geom_histogram(binwidth = 4, fill = "coral", color = "white") +
    theme_classic()

Binning to najważniejszy wybór w histogramie. Zbyt mała liczba przedziałów ukrywa rzeczywistą strukturę, taką jak drugi szczyt; zbyt wiele powoduje, że wykres staje się szumem. Wypróbuj kilka wartości, zanim zdecydujesz się na jedną.

Porównywanie grup. Zmapuj współczynnik do wypełnienia i ustaw pozycję tak, aby rozkłady pozostały czytelne:

ggplot(mtcars, aes(x = mpg, fill = factor(cyl))) +
    geom_histogram(bins = 10, position = "identity", alpha = 0.5) +
    theme_classic()

Przy ustawieniu position = „identity” i obniżonym współczynniku alfa histogramy nakładają się na siebie, co pozwala na bezpośrednie porównywanie kształtów. Użyj position = „dodge”, jeśli wolisz widzieć pojemniki obok siebie.

Gęstość zamiast ilości. Jeżeli grupy różnią się wielkością, narysuj gęstość tak, aby obszary były porównywalne, i nałóż na nią wygładzoną krzywą:

ggplot(mtcars, aes(x = mpg)) +
    geom_histogram(aes(y = after_stat(density)), bins = 10,
        fill = "coral", alpha = 0.6) +
    geom_density(color = "steelblue", linewidth = 1) +
    theme_classic()

Wykres słupkowy i histogram w R: Code Numer Referencyjny

Wykres słupkowy pasuje do kategorycznej osi x, gdzie oś y przedstawia liczbę lub statystykę podsumowującą. Poniższa tabela zawiera wywołania ggplot2 dla każdego wariantu omówionego powyżej:

Cel Code
Liczyć
ggplot(df, aes(x = factor(x1))) + geom_bar()
Policz z innym kolorem wypełnienia
ggplot(df, aes(x = factor(x1), fill = factor(x1))) + geom_bar()
Policz grupami, ułożonymi w stos
ggplot(df, aes(x = factor(x1), fill = factor(x2))) + geom_bar()
Licz w grupach, obok siebie
ggplot(df, aes(x = factor(x1), fill = factor(x2))) + geom_bar(position = position_dodge())
Liczenie z grupami, ułożone w%
ggplot(df, aes(x = factor(x1), fill = factor(x2))) + geom_bar(position = "fill")
Wartości (statystyka podsumowująca)
ggplot(df, aes(x = factor(x1), y = x2)) + geom_bar(stat = "identity")
Histogram zmiennej ciągłej
ggplot(df, aes(x = x1)) + geom_histogram(bins = 30)

FAQ

Użyj histogramu, gdy zmienna na osi x jest ciągła i chcesz zobaczyć jej rozkład. Użyj wykresu słupkowego, gdy oś x zawiera różne kategorie i chcesz je porównać.

Wewnątrz funkcji aes() funkcja fill mapuje zmienną na kolor, dzięki czemu każda grupa otrzymuje własny odcień. Poza funkcją aes(), wewnątrz funkcji geom_bar(), wypełnienie jest stałą wartością stosowaną do każdego słupka.

Nie ma uniwersalnej odpowiedzi. Zacznij od pierwiastka kwadratowego z liczby obserwacji, a następnie dostosuj. Zbyt mała liczba przedziałów ukrywa strukturę, taką jak drugi szczyt, a zbyt duża generuje wykres o zaszumionych, spiczastych kształtach.

Histogramy to standardowy pierwszy krok w eksploracyjnej analizie danych w projektach AI, ujawniający skosy, wartości odstające i nierównowagę klas jeszcze przed wytrenowaniem modelu. Wykresy słupkowe podsumowują następnie ważność cech i częstość występowania kategorii.

Tak. Asystenci AI mogą tworzyć warstwy ggplot2 na podstawie prostego opisu wykresu i wyjaśniać błędy, takie jak brakujący argument statystyczny. Zawsze uruchamiaj wygenerowany kod na własnych danych, aby potwierdzić mapę.ping jest w porządku.

Podsumuj ten post następująco: