7 Typy wykresów
| Typ wykresu | Typ (ang) | ggplot2 |
|---|---|---|
| Histogram | Histogram | geom_histogram() |
| Wykres gęstości | Density plot | geom_density() |
| Wykres słupkowy | Bar plot | geom_bar(), geom_col() |
| Wykres linniowy | Line plot | geom_line() |
| Wykres rozrzutu | Scatter plot | geom_point() |
| Wykres pudełkowy | Box plot | geom_boxplot() |
| Wykres skrzypcowy | Violin plot | geom_violin() |
| Wykres kropkowe | Dot plot | geom_point() + coord_flip() |
| Heatmapy | Heatmap | geom_tile() |
| Wykres grzbietowe | Ridgeline plot | ggridges::geom_density_ridges() |
| Dystrybuanta | CDF plot | stat_ecdf() |
| Wykres mozaikowe | Mosaic plot | ggmosaic: geom_mosaic() |
| Tree map | Tree map | treemapify::geom_treemap() |
data("gapminder", package = "gapminder")
dane2007 <- subset(gapminder, year==2007)7.1 Histogram
Graficzny sposób przedstawiania rozkładu liczebności dla wybranej zmiennej.
Wykres został poraz pierwszy wprowadzony przez Pearsona w 1895 roku.
Wykres powstaje w dwóch etapach:
- Zakres wartości danych dzielony jest na rozłączne przedziały o równej szerokości,
- Dla każdego przedziału rysowane są słupki o wysokości równej liczbie obserwacji w każdym przedziale.
Dobór przedziałów jest istotny. Różne przedziały mogą pokazać różną informację.
Pakiet
ggplot2domyślnie definiuje przedział jako zakres/30. Ustawienia te można zmienić używając parametru *bins* (liczba przedziałów) lub *binwidth* (szerokość przedziału).
#HISTOGRAM
ggplot(dane2007, aes(x = gdpPercap)) + geom_histogram()`stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

#HISTOGRAM
ggplot(dane2007, aes(x = gdpPercap)) + geom_histogram(bins = 15)
#HISTOGRAM
ggplot(dane2007, aes(x = gdpPercap)) + geom_histogram(binwidth=10000)
Wykonać histogram dla zmiennej lifeExp dla 2007 roku. Ustawić szerokość przedziałów co 5 lat.
Rozwiązanie:
ggplot(dane2007, aes(x = lifeExp)) + geom_histogram(binwidth=5) 7.2 Wykres słupkowy
- wizualizacja danych jakościowych - tj. częstość występowania zmiennej jakościowej (np. liczba państw na danym kontynencie).
ggplot(dane2007, aes(x = continent)) + geom_bar()
- wizualizacja danych ilościowych według kategorii - np. PKB na osobę w poszczególnych państwach.
gapminder_sel = gapminder %>%
filter(country %in% c("Poland", "Germany", "Czech Republic", "Slovak Republic") & year == 2007)
ggplot(data = gapminder_sel, aes(x = fct_reorder(as.factor(country), gdpPercap), y = gdpPercap)) +
geom_col() +
labs(x = NULL, y = NULL, title = "PKB na osobę (USD, 2007)")
- odwrócenie osi
ggplot(data = gapminder_sel, aes(x = fct_reorder(as.factor(country), gdpPercap), y = gdpPercap)) +
geom_col() +
labs(x = NULL, y = NULL, title = "PKB na osobę (USD, 2007)") +
coord_flip()
7.3 Wykres liniowy
#Oblicza średnią oczekiwaną długość życia dla poszczególnych lat
library(dplyr)
by_year <- group_by(gapminder, year)
mean_lifeExp_by_year <- summarize(by_year,
srednia=mean(lifeExp))
#Wykres liniowy
ggplot(data = mean_lifeExp_by_year, aes(x = year, y = srednia)) + geom_line()
Wykonać wykres liniowy pokazujący jak zmieniała się średnia wartość gpdPercap w poszczególnych latach?
Rozwiązanie:
library(dplyr)
by_year <- group_by(gapminder, year)
mean_gdp_by_year <- summarize(by_year,
srednia=mean(gdpPercap))
#Wykres liniowy
ggplot(data = mean_gdp_by_year, aes(x = year, y = srednia)) + geom_line() 7.4 Wykres rozrzutu
- stosowany do pokazania zależności między zmiennymi
ggplot(data=dane2007, aes(x=gdpPercap, y=lifeExp)) + geom_point()
Zwizualizować zależnośc między długością trwania życia a liczbą ludności w 2007 roku.
Rozwiązanie:
ggplot(data=dane2007, aes(x=lifeExp, y=pop)) + geom_point() Wykonać wykres zależności między zmiennymi lifeExp oraz gdpPercap wykorzystując dane gapminder.
Rozwiązanie:
ggplot(data=gapminder, aes(x=gdpPercap, y=lifeExp)) + geom_point() 7.5 Wizualizacja statystyk opisowych
7.5.1 Wykres pudełkowy
Obrazuje podstawowe statystyki opisowe oraz wartości odstające :
- dolny kwartyl - dolna krawędz pudełka
- mediana - linia środkowa
- górny kwartyl - górna krawędź pudełka
- linie pionowe oznaczają najbardziej ekstremalne wartości (1,5IQR ponad krawędź pudełka, dolna to 1,5IQR poniżej wartości dolnej krawędzi pudełka)
- punkty oznaczają wartości odstające

ggplot(data = gapminder, aes(x = year, y = lifeExp, group = year)) + geom_boxplot()
Wykonaj wykres pudełkowy w podziale na lata dla zmiennej gdpPercap.
Rozwiązanie:
ggplot(data = gapminder, aes(x = year, y = gdpPercap, group = year)) + geom_boxplot() Wykonaj wykres pudełkowy w podziale na kontynenty dla zmiennej gdpPercap. Wykorzystaj zbiór danych gapminder.
Rozwiązanie:
ggplot(data = gapminder, aes(x = continent, y = gdpPercap)) + geom_boxplot() 7.6 stat_summary
Funkcja stat_summary pozwala na wizualizację dowolnych statystyk opisowych bez konieczności wcześniejszego obliczania ich z wykorzystaniem np. funkcji dplyr::summarize().
- wizualizacja średnich wartości zmiennej lifeExp w poszczególnych latach
ggplot(data = gapminder, aes(x = year, y = lifeExp)) +
stat_summary(fun = "mean", geom = "line")
Wykonaj wykres pokazujący jak zmieniała się wartość średnia PKB na osobę (zmienna gdPercap) w latach 1952-2007.
Rozwiązanie:
ggplot(data = gapminder, aes(x = year, y = gdpPercap)) +
stat_summary(fun = "mean", geom = "line") - wizualizacja mediany dla zmiennej lifeExp w poszczególnych latach
ggplot(data = gapminder, aes(x = year, y = lifeExp)) +
stat_summary(fun = "median", geom = "line")
- wizualizacja wartości średniej (punkt), oraz minimalnej i maksymalnej
obiekt geometryczny pointrange wymaga zdefiniowania 3 funkcji: określającej położenie punktu (argument fun), oraz “wąsów” (argumenty fun.min oraz fun.max)
ggplot(data = gapminder, aes(x = year, y = lifeExp)) +
stat_summary(fun = mean,
geom = "pointrange",
fun.min = min,
fun.max = max)
Wykonaj wykres pokazujący jak zmieniała się wartość średnia, minimalna oraz maksymalna PKB na osobę (zmienna gdPercap) w latach 1952-2007.
Rozwiązanie:
ggplot(data = gapminder, aes(x = year, y = gdpPercap)) +
stat_summary(fun = mean,
geom = "pointrange",
fun.min = min,
fun.max = max)- wizualizacja wartości średnich +/- odchylenie standardowe
ggplot(data = gapminder, aes(x = year, y = lifeExp)) +
stat_summary(fun = mean,
geom = "pointrange",
fun.max = function(x) mean(x) + sd(x),
fun.min = function(x) mean(x) - sd(x))
Wykonaj wykres pokazujący wartości śrendnie \(\pm\) odchylenie standardowe dla zmiennej gdpPercap.
Rozwiązanie:
ggplot(data = gapminder, aes(x = year, y = gdpPercap)) +
stat_summary(fun = mean,
geom = "pointrange",
fun.max = function(x) mean(x) + sd(x),
fun.min = function(x) mean(x) - sd(x)) - przebieg minimalnych i maksymalnych wartości lifeExp w latach 1952 - 2007
ggplot(gapminder, aes(x = year, y = lifeExp)) +
stat_summary(fun = mean, geom = "ribbon", fill = "blue",
fun.max = min, fun.min = max)
7.7 Warstwy - łączenie różnych typów wykresów
Pakiet ggplot2 pozwala także na łączenie ze sobą różnych typów wykresów.
- wizualizacja średniej zmienności oczekiwanej długości trwania życia w latach 1952-2007
#Oblicza średnią oczekiwaną długość życia dla poszczególnych lat
library(dplyr)
by_year <- group_by(gapminder, year)
mean_lifeExp_by_year <- summarize(by_year,
srednia=mean(lifeExp))
#Wykres liniowy
ggplot(data = mean_lifeExp_by_year, aes(x = year, y = srednia)) +
geom_line() +
geom_point()
Zwizualizuj średnią zmienność PKB na osobę (zmienna gdpPercap) w latach 1952-2007
Rozwiązanie:
by_year <- group_by(gapminder, year)
mean_gdp_by_year <- summarize(by_year,
srednia=mean(gdpPercap))
#Wykres liniowy
ggplot(data = mean_gdp_by_year, aes(x = year, y = srednia)) +
geom_line() +
geom_point() - dodanie wartości średniej (czerwony punkt) do wykresu pudełkowego
ggplot(data = dane2007, aes(x = continent, y = lifeExp)) +
geom_boxplot() +
stat_summary(fun =mean, geom="point", shape=20, size=5, color="red", fill="red") 
Wykonaj wykres pudełkowy dla zmiennej gdPercap w podziale na lata oraz dodaj do wykresu punkt oznaczający średnią wartość.
Rozwiązanie:
ggplot(data = gapminder, aes(x = year, y = gdpPercap, group = year)) +
geom_boxplot() +
stat_summary(fun =mean, geom="point", shape=20, size=5, color="red", fill="red") - dodanie wartości obserwacji do wykresu pudełkowego
ggplot(data = dane2007, aes(x = continent, y = lifeExp)) +
geom_boxplot() +
geom_point()
ggplot(data = dane2007, aes(x = continent, y = lifeExp)) +
geom_boxplot() +
geom_jitter()
Wykonaj wykres pudełkowy dla zmiennej lifeExp w podziale na lata. Dodaj do wykresu punkty oznaczające poszczególne obserwacje.
Rozwiązanie:
ggplot(data = gapminder, aes(x = year, y = lifeExp, group = year)) +
geom_boxplot() +
geom_jitter()- wizualizacja statystyk opisowych długości trwnia życia (zmienna lifeExp) w Europie w latach 1952-2007
gapminder %>%
filter(continent == 'Europe') %>%
ggplot(aes(x = year, y = lifeExp)) +
stat_summary(fun = mean, geom = "ribbon", alpha = .3, fill = "#1E90FF", fun.max = min, fun.min = max) +
stat_summary(fun = mean, geom = "pointrange", fun.max = min, fun.min = max, color = "darkblue") +
stat_summary(fun = max, geom = "line", color = "black") +
stat_summary(fun = min, geom = "line", color = "black")
Zwizaulizuj statystyki opisowe (min, max, średnią) PKB na osobę (zmienna gdpPercap) w Azji w latach 1952-2007
Rozwiązanie:
gapminder %>%
filter(continent == 'Asia') %>%
ggplot(aes(x = year, y = gdpPercap)) +
stat_summary(fun = mean, geom = "ribbon", alpha = .3, fill = "#1E90FF", fun.max = min, fun.min = max) +
stat_summary(fun = mean, geom = "pointrange", fun.max = min, fun.min = max, color = "darkblue") +
stat_summary(fun = max, geom = "line", color = "black") +
stat_summary(fun = min, geom = "line", color = "black") 7.7.1 Wizualizacja danych w grupach
Wizualizacja danych w podziale na grupy może być wykonana m.in za pomocą wykresu pudełkowego (geom_boxplot()), wykresu skrzypcowego (geom_violin()), lub za pomocą tzw. multiwykresów (facet_grid())
ggplot(data = dane2007, aes(x = continent, y = lifeExp)) +
geom_boxplot()
ggplot(data = dane2007, aes(x = continent, y = lifeExp)) +
geom_violin()
Wykonaj wykres skrzypcowy dla zmiennej gdPercap w podziale na kontynenty.
Rozwiązanie:
ggplot(data = gapminder, aes(x = continent, y = gdpPercap)) +
geom_violin() 7.8 Multiwykresy
ggplot(data = dane2007, aes(x = gdpPercap, y = lifeExp)) +
geom_point() +
facet_wrap(~continent)
ggplot(data = dane2007, aes(x = lifeExp)) +
geom_histogram() +
facet_wrap(~continent)`stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

Wykonaj multiwykres przedstawiający rozkład wartości zmiennej gdpPercap (na histogramie) w podziale na kontynenty.
Rozwiązanie:
ggplot(data = dane2007, aes(x = gdpPercap)) +
geom_histogram() +
facet_wrap(~continent) 7.9 Zapisywanie wykresów
p <- ggplot(data = dane2007, aes(x = continent, y = lifeExp)) +
geom_boxplot() +
labs(x = "Kontynent", y = "Oczekiwana długość trwania życia")ggsave(filename = "Wykres.pdf", plot = p)
ggsave(filename = "Wykres.png", plot = p, dpi = 300)7.10 Inne typy wykresów
7.10.1 Wykresy kropkowe
gapminder_am2007 = filter(gapminder, continent == "Americas", year == 2007)
ggplot(gapminder_am2007, aes(fct_reorder(as.factor(country), lifeExp), lifeExp)) +
geom_point(size = 5, col = "#0000a1") +
coord_flip() +
labs(x = NULL, y = NULL, title = "Oczekiwana długość życia",
subtitle = "Kontynent: Ameryka, 2007")
7.10.2 Heatmapy
gapminder_am = filter(gapminder, continent == "Americas")
ggplot(gapminder_am, aes(year, fct_reorder(as.factor(country), lifeExp, tail, n = 1, .desc = FALSE),
fill = lifeExp)) +
geom_tile() +
labs(y = NULL, x = NULL, title = "Oczekiwana długość życia",
subtitle = "Kontynent: Ameryka", fill = NULL)
7.10.3 Wykresy gęstości
- Dla jednej zmiennej
ggplot(data = dane2007, aes(x = lifeExp)) +
geom_density() +
labs(x = NULL, y = "Udział krajów", subtitle = "Oczekiwana długość życia (2007)")
- Dla dwóch zmiennych
gapminder19572007 = filter(gapminder, year %in% c(1957, 2007))
ggplot(data = gapminder19572007, aes(x = lifeExp, fill = as.factor(year))) +
geom_density(alpha = 0.3) +
labs(x = NULL, fill = "Rok:", y = "Udział krajów",
subtitle = "Oczekiwana długość życia") +
theme(legend.position = "bottom")
7.10.4 Wykresy grzbietowe
library(ggridges)
ggplot(data = gapminder, aes(x = lifeExp, y = year, group = year)) +
geom_density_ridges(alpha = 0.2) +
labs(y = NULL, title = "Oczekiwana długość życia", x = NULL) +
scale_x_continuous(breaks = seq(20, 80, 20)) +
scale_y_continuous(breaks = seq(1950, 2010, 10))Picking joint bandwidth of 3.88

7.10.5 Dystrybuanta (ang. cumulative distribution function - CDF)
ggplot(data = dane2007, aes(lifeExp)) +
stat_ecdf() +
labs(y = "Udział", subtitle = "Oczekiwana długość życia (2007)", x = NULL)
7.10.6 Wykresy liniowe z wypełnionym obszarem
gapminder_pol = gapminder %>% filter(country == 'Poland')
ggplot(gapminder_pol, aes(year, gdpPercap)) +
geom_line() +
geom_area() +
labs(x = NULL, y = NULL, title = "Polska", subtitle = "PKB na osobę (USD, 2007)")
7.10.7 Wykresy kołowe
gapminder2007_unique = gapminder %>%
filter(year == 2007) %>%
group_by(continent) %>%
summarize(liczba = n())ggplot(data = gapminder2007_unique, aes(y = "", x = liczba, fill = continent)) +
geom_bar(stat = "identity") +
coord_polar("x") +
theme_void() +
geom_text(aes(label = continent), position = position_stack(vjust = 0.5), size = 8) +
theme(legend.position = "none")
7.10.8 Wykresy słupkowe - skumulowane
ggplot(data = gapminder2007_unique, aes(y = "",
x = liczba,
fill = continent)) +
geom_bar(stat = "identity", position = "stack") +
coord_flip() 
- wykres skumulowany słupkowy dla 3 zmiennych
gapminder5 = mutate(gapminder,
gdpPercap_group = cut_number(gdpPercap, 3,
labels = c("niska", "średnia", "wysoka")))
gapminder5_sum = count(gapminder5, gdpPercap_group, year)
ggplot(gapminder5_sum, aes(year, n, gdpPercap_group, fill = fct_rev(gdpPercap_group))) +
geom_col(position = "stack") +
labs(x = NULL, y = "Liczba krajów", fill = NULL, title = "Grupa zamożności")
7.10.9 Wykresy mozaikowe
gapminder5 = mutate(gapminder,
gdpPercap_group = cut_number(gdpPercap, 3,
labels = c("niska", "średnia", "wysoka")))library(ggmosaic)
gapminder5_2007 = filter(gapminder5, year == 2007)
ggplot(data = gapminder5_2007) +
geom_mosaic(aes(x = product(continent), fill = gdpPercap_group))
7.10.10 Tree map
library(treemapify)
ggplot(dane2007, aes(area = pop, fill = lifeExp,
subgroup = continent, label = country)) +
geom_treemap(col = "white") +
geom_treemap_subgroup_border() +
geom_treemap_subgroup_text(place = "centre", grow = TRUE, alpha = 0.5, colour =
"black", fontface = "italic", min.size = 0) +
geom_treemap_text(colour = "white", place = "topleft", reflow = TRUE, alpha = 0.75) +
# guides(fill = "none") +
labs(fill = NULL, title = "Oczekiwana długość życia (2007)")