5  Podstawy grafiki w pakiecie ggplot2

5.1 Zbiór mtcars

Code
# Załadowanie zbioru danych
data(mtcars)
# Zmiana trzech zmiennych na czynniki (factors)
mtcars$gear <- factor(mtcars$gear,levels=c(3,4,5),labels=c('3 biegi', '4 biegi', '5 biegów'))
mtcars$am <- factor(mtcars$am, levels = c(0,1), labels = c('automatyczna','ręczna'))
mtcars$cyl <- factor(mtcars$cyl,levels=c(4,6,8),labels=c('4 cylindry', '6 cylindrów', '8 cylindrów'))

head(mtcars[,1:5])
                   mpg         cyl disp  hp drat
Mazda RX4         21.0 6 cylindrów  160 110 3.90
Mazda RX4 Wag     21.0 6 cylindrów  160 110 3.90
Datsun 710        22.8  4 cylindry  108  93 3.85
Hornet 4 Drive    21.4 6 cylindrów  258 110 3.08
Hornet Sportabout 18.7 8 cylindrów  360 175 3.15
Valiant           18.1 6 cylindrów  225 105 2.76
Code
library(ggplot2)
library(patchwork)
library(gganimate)
library(ggthemes)
library(dplyr)
library(tidyverse)

5.2 Wykresy punktowe

Code
# Podstawowa konstrukcja wykresu w ggplot2
ggplot(data=mtcars,aes(x=wt,y=mpg))+geom_point()

Code
# Zapis bez podawania nazw parametrów 'data=', 'x=' i 'y='
ggplot(mtcars,aes(wt,mpg))+geom_point()

Code
# Konwencja zapisu warstwy w nowej linii
ggplot(mtcars,aes(wt,mpg))+
  geom_point()

Code
# Wyróżnienie grup ze względu na liczbę cylindrów
ggplot(mtcars,aes(wt,mpg,color=cyl))+geom_point()

Code
# Wprowadzenie etykiet osi i legendy
ggplot(mtcars,aes(wt,mpg,color=cyl))+
  geom_point()+
  labs(x='Waga samochodu',y='Liczba przejechanych mil na   galonie paliwa',color='Liczba cylindrów')

Code
# Umieszczenie legendy pod wykresem
ggplot(mtcars,aes(wt,mpg,color=cyl))+
  geom_point()+
  labs(x='Waga samochodu',y='Liczba przejechanych mil na galonie paliwa',color='Liczba cylindrów')+
  theme(legend.position='bottom')

Code
# Wyróżnienie liczby biegów poprzez kształt
ggplot(mtcars,aes(wt,mpg,color=cyl,shape=gear))+
  geom_point()+
  labs(x='Waga samochodu',y='Liczba przejechanych mil na galonie paliwa',color='Liczba cylindrów',shape='Liczba biegów')+
  theme(legend.position='bottom')

Code
# Wyróżnienie mocy silnika poprzez rozmiar punktów
ggplot(mtcars,aes(wt,mpg,color=cyl,shape=gear,size=hp))+
  geom_point()+
  labs(x='Waga samochodu',y='Liczba przejechanych mil na galonie paliwa',color='Liczba cylindrów',shape='Liczba biegów',size='Moc')+
  theme(legend.position='right')

5.3 Histogram i gęstość

Code
# Konstrukcja histogramu dla zmiennej mpg 
ggplot(mtcars,aes(mpg))+
  geom_histogram()

Code
# Wykorzystanie parametru fill w konstrukcji histogramu
ggplot(mtcars,aes(mpg,fill=cyl))+
  geom_histogram(color='black')+
  labs(fill='Liczba cylindrów',x='Liczba mil przejechanych na galonie paliwa',y='Liczba samochodów')+
  theme(legend.position='bottom')

Code
# Konstrukcja gęstości z wypełnieniem względem cyl 
ggplot(mtcars,aes(mpg,fill=cyl))+
  geom_density(alpha=0.5)+
  labs(fill='Liczba cylindrów',x='Liczba mil przejechanych na galonie paliwa',y='Gęstość')+
  theme(legend.position='bottom')

Code
# Wykres słupkowy dla zmiennej cyl
ggplot(mtcars,aes(cyl))+
  labs(x='Liczba cylindrów',y='Liczba samochodów')+
  geom_bar()

5.4 Wykresy słupkowe

Code
# Wykres słupkowy poziomy – coord_flip
ggplot(mtcars,aes(cyl))+
  geom_bar(color='black',fill='red')+
  labs(x='Liczba cylindrów',y='Liczba samochodów')+
  coord_flip()

Code
# Konstrukcja wykresu słupkowego nakładanego 
ggplot(mtcars, aes(x = factor(cyl), fill = factor(gear))) +
  geom_bar(position = "stack") +
  labs(x = "Liczba cylindrów", y = "Liczba samochodów") +
  scale_fill_discrete(name = "Liczba biegów") +
  theme_minimal()

Code
# Konstrukcja wykresu słupkowego struktury
ggplot(mtcars, aes(x = factor(cyl), fill = factor(gear))) +
  geom_bar(position = "fill") +
  labs(subtitle = "Rodzaj skrzyni biegów:",x = "Liczba cylindrów", y = "Odsetek samochodów") +
  scale_fill_discrete(name = "Liczba biegów") +
  coord_flip()+
  theme_minimal()+
  theme(legend.position='bottom')+
     scale_y_continuous(labels = scales::percent_format())

Code
# Konstrukcja wykresu kołowego –współrzędne biegunowe
ggplot(mtcars,aes(x='',y=cyl,fill=cyl))+
  geom_col()+
  coord_polar(theta='y')

5.5 Wykresy pudełkowe i wiolinowe

Code
# Konstrukcja wykresu boxplot
ggplot(mtcars,aes(cyl,mpg))+
  geom_boxplot()+
  labs(x='Liczba cylindrów',y='Liczba mil przejechanych na galonie paliwa')

Code
# Dodanie warstwy z obserwacjami
ggplot(mtcars,aes(cyl,mpg))+
  geom_boxplot(fill='yellow')+
  geom_point()+
  labs(x='Liczba cylindrów',y='Liczba mil przejechanych na galonie paliwa')

Code
# "Rozrzucenie" obserwacji
ggplot(mtcars,aes(cyl,mpg))+
  geom_boxplot(fill='yellow')+
  geom_jitter(color='blue',size=2)+
  labs(x='Liczba cylindrów',y='Liczba mil przejechanych na galonie paliwa')

Code
# Konstrukcja wykresu wiolinowego
ggplot(mtcars,aes(factor(cyl),mpg))+
  geom_violin()+
  labs(x='Liczba cylindrów',y='Liczba mil przejechanych na galonie paliwa')

Code
# Wykres wiolinowy z „rozrzuconymi” punktami - jitter
ggplot(mtcars,aes(factor(cyl),mpg))+
  geom_violin(color='blue')+
  geom_jitter(color='red')+
  labs(x='Liczba cylindrów',y='Liczba mil przejechanych na galonie paliwa')

Code
# Wykres wiolinowy z „rozrzuconymi” punktami - jitter
ggplot(mtcars,aes(factor(cyl),mpg))+
  geom_violin(color='blue')+
    geom_boxplot(fill='yellow', alpha=0.3)+
  geom_jitter(color='red')+
  coord_flip()+
  labs(x='Liczba cylindrów',y='Liczba mil przejechanych na galonie paliwa')

5.6 Etykiety tekstowe

Code
# Wprowadzenie etykiet tekstowych
ggplot(mtcars,aes(wt,mpg,label=row.names(mtcars)))+
  geom_text()

Code
# Etykiety tekstowe i punkty
ggplot(mtcars,aes(wt,mpg,label=row.names(mtcars)))+
  geom_text()+
  geom_point()

Code
# Wprowadzenie etykiet tekstowych i punktów
library(ggrepel)
ggplot(mtcars,aes(wt,mpg,label=row.names(mtcars)))+
  geom_text_repel()+
  geom_point(aes(color=cyl))+
  labs(x='Liczba cylindrów')+
  theme(legend.position='bottom')

5.7 Regresja

Code
# Konstrukcja wykresu funkcji regresji
ggplot(mtcars,aes(wt,mpg))+
  geom_point()+
  geom_smooth()+
  labs(x='Waga samochodu',y='Liczba mil przejechanych na galonie paliwa')

Code
# Regresja liniowa 
ggplot(mtcars,aes(wt,mpg))+
  geom_smooth(method='lm')+
  geom_point()+
  labs(x='Waga samochodu',y='Liczba mil przejechanych na galonie paliwa')

Code
# Regresja kwadratowa
ggplot(mtcars,aes(wt,mpg))+
  geom_smooth(method='lm',formula=y~poly(x,2))+
  geom_point()+
  labs(x='Waga samochodu',y='Liczba mil przejechanych na galonie paliwa')

Code
# Funkcja regresji - wyróżnienie kilku grup
ggplot(mtcars,aes(wt,mpg,color=cyl))+
  geom_smooth(method='lm')+
  geom_point()+
  labs(x='Waga samochodu',y='Liczba mil przejechanych na galonie paliwa',color='Liczba cylindrów')+
  theme(legend.position='bottom')

5.8 Panele

Code
# Panele w konstrukcji wykresów
ggplot(mtcars,aes(wt,mpg))+
  geom_point()+
  labs(x='Waga samochodu',y='Liczba mil przejechanych na galonie paliwa',color='Liczba cylindrów')+
  facet_wrap(~cyl)

Code
ggplot(mtcars,aes(wt,mpg))+
  geom_point()+
  labs(x='Waga samochodu',y='Liczba mil przejechanych na galonie paliwa',color='Liczba cylindrów')+
  facet_grid(gear~cyl)

Code
# Zmiana położenia etykiet paneli
data <- transform(mtcars,
  am = factor(am, levels = 0:1, c("Automatyczna", "Ręczna")),
  cyl = factor(cyl, labels=c('4 cylindry', '6 cylindrów', '8 cylindrów')))
ggplot(data, aes(wt, mpg)) +
  geom_point() +
  facet_grid(am ~ cyl, switch = "both")

Code
# Konstrukcja wykresu stosowanego słupków dla liczby cylindrów dla dwóch grup skrzyń biegów
ggplot(mtcars, aes(x = factor(cyl), fill = factor(gear))) +
  geom_bar(position = "stack") +
  labs(title = "Rodzaj skrzyni biegów:",x = "Liczba cylindrów", y = "Liczba samochodów") +
  scale_fill_discrete(name = "Liczba biegów") +
  facet_wrap(~am)+
  theme_minimal()+
  theme(legend.position='bottom')

Code
# Tworzenie wykresu stosowanego słupków dla liczby cylindrów dla dwóch grup skrzyń biegów
ggplot(mtcars, aes(x = factor(cyl), fill = factor(gear))) +
  geom_bar(position = "fill") +
  labs(subtitle = "Rodzaj skrzyni biegów:",x = "Liczba cylindrów", y = "Odsetek samochodów") +
  scale_fill_discrete(name = "Liczba biegów") +
  facet_wrap(~am)+
  coord_flip()+
  theme_minimal()+
  theme(legend.position='bottom')+
     scale_y_continuous(labels = scales::percent_format())

5.9 Pakiet patchwork

Code
# Załadowanie biblioteki i utworzenie wykresów r1-r4 
library(patchwork)
r1=ggplot(data=mtcars,aes(x=wt,y=mpg,color=cyl))+geom_point()+theme(legend.position='none')
r2=ggplot(mtcars,aes(mpg,fill=cyl))+
  geom_histogram()+
      theme(legend.position='none')
r3=ggplot(mtcars,aes(cyl,mpg,fill=cyl))+
  geom_boxplot()+
  geom_jitter()+
  theme(legend.position='none')+
  coord_flip()
r4=ggplot(mtcars,aes(wt,mpg,color=cyl))+
  geom_smooth(method='lm')+
    theme(legend.position='none')+
  geom_point()
Code
# Umieszczenie dwóch wykresów obok siebie
r3+r1

Code
# Umieszczenie trzech wykresów obok siebie
r3+r2+r1

Code
# Rozmieszczenie czterech wykresów
r1+r2+r3+r4

Code
# Umieszczenie czterech wykresów obok siebie
r3|r2|r1|r4

Code
# Umieszczenie dwóch wykresów w układzie pionowym
r1/r2

Code
# Umieszczenie jednego wykresu u góry i dwóch na dole
r4/(r3+r2)

Code
# Umieszczenie czterech wykresów w trzech liniach 
r2/(r1+r4)/r3

Code
# Umieszczenie czterech wykresów w trzech liniach 
(r1+r4)|r2/r3

Code
# Konstrukcja obiektu rys 
rys=ggplot(mtcars,aes(wt,mpg,color=cyl))+
  geom_smooth(method='lm')+
  geom_point()+
  labs(x='Waga samochodu',y='Liczba mil przejechanych na ga-lonie paliwa',color='Liczba cylindrów')
rys

5.10 Motywy i animacje

Code
# Zastosowanie motywów do obiektu rys
library(ggthemes)
r1=rys+theme_minimal()
r2=rys+theme_excel()
r3=rys+theme_economist()
r4=rys+theme_igray()
r1/r2/r3/r4

Code
# Konstrukcja animacji 
library(gganimate)
p=ggplot(mtcars, aes(factor(cyl), mpg)) + 
  geom_boxplot() + 
  transition_states(
    gear,
    transition_length = 1,
    state_length = 2) +
  labs(title = 'Liczba biegów: {closest_state}',x='Liczba cylindrów',y='Liczba mil przejechanych na galonie paliwa')
# Wykonanie animacji
animate(p, height = 4, width = 8, units = "in", res = 200)

Code
# Konstrukcja animacji z dodatkowymi parametrami 
p=ggplot(mtcars, aes(factor(cyl), mpg)) + 
    geom_jitter(aes(color=am)) + 
  geom_boxplot(aes(fill=cyl,alpha=0.4)) + 
        theme(legend.position='bottom')+
  transition_states(
    gear,
    transition_length = 1,
    state_length = 2) +
  labs(title = 'Liczba biegów: {closest_state}',x='Liczba cylindrów',y='Liczba mil przejechanych na galonie paliwa')
# Wykonanie animacji
animate(p, height = 4, width = 8, units = "in", res = 200)