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.

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.
- Pierwszy zlicza liczbę wystąpień w każdej grupie.
- 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:
Note: upewnij się, że konwertujesz zmienne na czynnik, w przeciwnym razie R traktuje zmienne jako numeryczne. Zobacz poniższy przykład.
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:
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:
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:
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:
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:
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:
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:
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:
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:
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:
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:
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) |













