1 Rodzaje wykresów:

  • Wykresy eksploracyjne:
    • służą głównie twórcy
    • główna cecha - możliwość iteracji
  • Wykresy komunikacyjne:
    • służą głównie przekazaniu wiedzy
    • ich tworzenie wymaga czasu - ważny jest dobór podpisów, kolorów

2 Wykresy w R

  • podstawowa grafika np. plot(x, y), hist(x)
  • pakiet ggplot2

2.1 Pierwszy wykres w R - podstawowa grafika

df = data.frame(zmiennaA = c(1:10), zmiennaB = c(3:12))
#Składnia 1 
plot(df$zmiennaA, df$zmiennaB)

#Można też użyć składni 
plot(zmiennaA~zmiennaB, df)

2.1.1 Modyfikowanie wykresu

Wyświetl stronę pomocy dla funkcji plot() oraz par aby sprawdzić jakie parametry można zdefiniować. Parametry graficzne dostarczane z pakietem graphic są opisane także na stronie Quick-R: Graphical Parameters

W poniższym przykładzie użyto: main - tytuł wykresu, col - kolor punktów/lini, cex - rozmiar punktów, pch - typ punktu (przyjmuje wartości od 0-25), type - typ wykresu (p-wyświetla tylko punkty, b-linie i punkty, l-tylko linie), xlim, ylim - zakres osi x oraz y, xlab, ylab - opis osi x oraz y.

plot(zmiennaA~zmiennaB, 
     df, 
     main="Zależność cechy A od cechy B", 
     col="red", 
     cex=0.7, 
     pch = 15, 
     type="b", 
     xlab="Cecha B", 
     ylab = "Cecha A", 
     xlim=c(0,13), 
     ylim=c(0,13))

2.1.2 Zapisywanie do plików.

Zapis do pliku PNG

#Zapis wykresu do png 
png("wykres1.png", width=800, height=800)
#wykres
plot(zmiennaA~zmiennaB, 
     df, 
     main="Zależność cechy A od cechy B", 
     col="red", 
     cex=0.7, 
     pch = 15, 
     type="b", 
     xlab="Cecha B", 
     ylab = "Cecha A", 
     xlim=c(0,13), 
     ylim=c(0,13))
#zamknięcie okna wykresu
dev.off()

Zapis do pliku PDF

#Zapis wykresu do pdf
pdf("wykres1.pdf", width=8, height=8)
#wykres
plot(zmiennaA~zmiennaB, 
     df, 
     main="Zależność cechy A od cechy B", 
     col="red", 
     cex=0.7, 
     pch = 15, 
     type="b", 
     xlab="Cecha B", 
     ylab = "Cecha A", 
     xlim=c(0,13), 
     ylim=c(0,13))
#zamknięcie okna wykresu
dev.off()

2.2 Pierwszy wykres w R z pakietem ggplot2

df = data.frame(zmiennaA = c(1:10), zmiennaB = c(3:12))
library(ggplot2)
ggplot(df, aes(x=zmiennaB, y=zmiennaA)) + 
  geom_point()

2.2.1 Modyfikowanie wykresu

ggplot(df, aes(x=zmiennaB, y=zmiennaA)) + 
  geom_point(size=2, colour="red", shape=15) 

ggplot(df, aes(x=zmiennaB, y=zmiennaA)) + 
  geom_point(size=2, colour="red", shape=15) + 
  labs(title="Zależność cechy B od cechy A", x ="Cecha B", y = "Cecha A")

Innym sposobem wykonania powyższego wykresu jest stworzenie “wykresu bazowego”, a następnie dodawanie do niego kolejnych elementów:

p <- ggplot(df, aes(x=zmiennaB, y=zmiennaA)) + 
  geom_point(size=2, colour="red", shape=15)
  
p + labs(title="Zależność cechy B od cechy A", x ="Cecha B", y = "Cecha A")
ggplot(df, aes(x=zmiennaB, y=zmiennaA)) + 
  geom_point(size=2, colour="red", shape=15) + 
  labs(title="Zależność cechy B od cechy A", x ="Cecha B", y = "Cecha A") + 
  xlim(0,13) + 
  ylim(0,13)

ggplot(df, aes(x=zmiennaB, y=zmiennaA)) + 
  geom_line(linetype="dashed", color="blue", size=0.7) + 
  geom_point(size=2, colour="red", shape=15) + 
  labs(title="Zależność cechy B od cechy A", x ="Cecha B", y = "Cecha A") + 
  xlim(0,13) + 
  ylim(0,13)

Zmodyfikuj powyższy kod zmieniając kolor lini na czerwoną, kropokową (dotted); zmień także typ punktu na zielone wypełnione kółka.

Poniżej zestawiono dwa wykresy: Przed zmianą (po lewej) oraz po zmianie parametrów (po prawej).

## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.

ggplot(df, aes(x=zmiennaB, y=zmiennaA)) + 
  geom_line(linetype="dashed", color="blue", size=0.7) + 
  geom_point(size=2, colour="red", shape=15) + 
  labs(title="Zależność cechy B od cechy A", x ="Cecha B", y = "Cecha A") + 
  xlim(0,13) + 
  ylim(0,13) + 
  theme_bw()

Sprawdź jak będzie wyglądał powyższy wykres stosując theme_classic()

Poniżej zestawiono dwa wykresy: Przed zmianą (po lewej) oraz po zmianie parametrów (po prawej).

2.2.2 Zapisywanie wykresu do pliku

p <- ggplot(df, aes(x=zmiennaB, y=zmiennaA)) + 
  geom_point(size=2, colour="red", shape=15) + 
  labs(title="Zależność cechy B od cechy A", x ="Cecha B", y = "Cecha A") + 
  xlim(0,13) + 
  ylim(0,13) + 
  theme_classic()
ggsave(filename = "Wykres.pdf", plot = p)
ggsave(filename = "Wykres.png", plot = p, dpi = 300)

3 Różne typy wykresów

Każdy z typów wykresów może zostać wykonany za pomocą funkcji grafiki podstawowej oraz za pomocą pakietu ggplot2. Poniżej zestawione zostały funkcje do wykonania określonego typu wykresu.

Typ_wykresu Typ_wykresu_ang Funkcje_podstawowe ggplot2
Wykres rozrzutu Scatter plot plot() geom_point()
Wykres pudełkowy Box plot boxplot() geom_boxplot()
Histogram Histogram plot hist() geom_histogram()
Wykres gęstości density plot density() geom_density()
Wykres słupkowy Bar plot barplot() geom_bar()
Wykres liniowy Line plot plot() i line() geom_line()

Przykłady poniższych wykresów zostały wykonane na podstawie danych z pakietu gapminder dla 2007 roku.

data("gapminder", package = "gapminder")
dane2007 <- subset(gapminder, year==2007)

3.1 Wykres rozrzutu

  • stosowany do pokazania zależności między zmiennymi
ggplot(data=dane2007, aes(x=gdpPercap, y=lifeExp)) + geom_point()

3.1.1 Modyfikacja wykresu względem wartości zmiennej

p1 <- ggplot(data=dane2007, aes(x=gdpPercap, y=lifeExp, color = pop)) + 
  geom_point() + 
  labs(title = "P1")

p2 <- ggplot(data=dane2007, aes(x=gdpPercap, y=lifeExp, size = pop)) + 
  geom_point() + 
  labs(title = "P2")

p3 <- ggplot(data=dane2007, aes(x=gdpPercap, y=lifeExp, shape = continent)) + 
  geom_point() + 
  labs(title = "P3")

p4 <- ggplot(data=dane2007, aes(x=gdpPercap, y=lifeExp, color = continent)) + 
  geom_point() + 
  labs(title = "P4")

gridExtra::grid.arrange(p1, p2, p3, p4, ncol = 2, nrow = 2)

Zmodyfikuj wykres rozrzutu (P4), dodając do niego tytuł i pełen opis osi (“Oczekiwana dalsza długość trwania życia”, “PKB na osobę (USD)”). Sprawdź co zmieni się po dodaniu argumentu labs(color = “Kontynent”).

3.2 Wykres słupkowy

ggplot(dane2007, aes(x = continent)) + geom_bar()

Zmień sposób wyświetlania powyższego wykresu używając theme_classic(). Zmodyfikuj powyższy wykres dodając tytuł oraz opisy osi. Zmień kolor wypełnienia słupków na ciemnozielony (darkgreen).

Poniżej zestawiono dwa wykresy: Przed zmianą (po lewej) oraz po zmianie parametrów (po prawej).

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

Zmień sposób wyświetlania powyższego wykresu używając theme_classic(). Zmodyfikuj kolor oraz typ linii (przerywana - dashed, niebieska). Dodaj tytuł oraz opis osi.

Poniżej zestawiono dwa wykresy: Przed zmianą (po lewej) oraz po zmianie parametrów (po prawej).

Podpowiedź: Aby zapisać tytuł w dwóch liniach trzeba dodać znak symbol \n. Np. “Średnia oczekiwana długość trwania \n życia w latach 1952-2007”)

3.4 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 2 etapach:
      1. Zakres wartości danych dzielony jest na rozłączne przedziały o równej szerokości,
      1. Dla każdego przedziału rysowane są słupki o wysokości równej liczbie obserwacji w każdym przedziale.
ggplot(dane2007, aes(x = gdpPercap)) + geom_histogram()
ggplot(dane2007, aes(x = gdpPercap)) + geom_histogram(bins = 15)
ggplot(dane2007, aes(x = gdpPercap)) + geom_histogram(binwidth=10000)
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

3.5 Wykres pudełkowy

Obrazuje podstawowe statystyki opisowe:

  • 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 = dane2007, aes(x = continent, y = lifeExp)) + geom_boxplot()

Posługując się przykładami zamieszczonymi na stronie internetowej http://www.sthda.com/english/wiki/ggplot2-box-plot-quick-start-guide-r-software-and-data-visualization dowolnie zmodyfikuj powyższy wykres. Pamiętaj aby dodać tytuł oraz opisy osi.

Dodaj do wykresu punkt oznaczający średnią wartość. Przykład jak to zrobić można znaleźć na stronie internetowej http://www.sthda.com/english/wiki/ggplot2-box-plot-quick-start-guide-r-software-and-data-visualization

Przykładowa modyfikacja parametrów wykresu pudełkowego.

Proszę dodać komentarz do poniższego kodu, opisujący jakich modyfikacji dokonują poszczególne argumenty funkcji ggplot.

kolejnosc_kontynentow <- c("Europe", "Asia", "Africa", "Americas", "Oceania")

ggplot(data = dane2007, aes(x = continent, y = lifeExp, color = continent)) + 
  geom_boxplot(outlier.colour = "red", outlier.shape = 8, outlier.size = 3) + 
  scale_x_discrete(limits = kolejnosc_kontynentow, 
                   labels = c("Europa", "Azja", "Afryka", "Ameryki", "Oceania")) + 
  scale_color_manual(name = "Kontynent", 
                     limits = kolejnosc_kontynentow, 
                     labels =  c("Europa", "Azja", "Afryka", "Ameryki", "Oceania"),
                     values = c("Europe" = "darkgreen", 
                                "Asia" = "blue", 
                                "Africa" = "darkorange", 
                                "Americas" = "brown",  
                                "Oceania" = "purple")) + 
  stat_summary(fun = mean, geom="point", shape=20, size=4) + 
  labs(x = "Kontynent", 
       y = "Oczekiwana długość trwania życia", 
       title = "Zróżnicowanie oczekiwanej długości trwania życia na kontynentach") + 
  theme_bw() + 
  theme(legend.position="bottom") 

4 Wykresy według grup - facet_wrap()

Każdy panel przedstawia histogram dla innego kontynentu.

ggplot(dane2007, aes(x = gdpPercap)) + geom_histogram() + facet_wrap(~continent)
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

5 Ćwiczenie do samodzielnego wykonania

Ze zbioru danych gapminder wyselekcjonuj dane dla 2007 roku oraz wykonaj wykresy ilustrujące:

  • zależność między produktem krajowym brutto (oś x) a oczekiwaną długością trwania życia z uwzględnieniem liczby ludności.

    • Liczbę ludności zaznaczyć kolorem,
    • Zmienić domyślną skalę barwną.
  • zależność między produktem krajowym brutto (oś x) a oczekiwaną długością trwania życia z uwzględnieniem podziału na kontynenty

    • Podział na kontynenty uwzględnij za pomocą kształtu i koloru.
    • Poszczególnym kontynentom przypisz swoje kolory oraz kształty (poszukaj jak to zrobić)
    • Zmień pozycję legendy (z domyślnej po prawej stronie) - umieść legendę pod wykresem. (poszukaj jak to zrobić)
    • Podpowiedź: http://www.sthda.com/english/wiki/ggplot2-point-shapes
  • histogram dla oczekiwanej długości trwania życia w roku 2007.

  • wykres słupkowy pokazujący liczbę państw na każdym kontynencie.

      • Przypisz do każdego kontynentu te same kolory, które zostały przypisane na wykresie przedstawiającym zależność między produktem krajowym brutto (oś x) a oczekiwaną długością trwania życia z uwzględnieniem podziału na kontynenty.
    • Nie wyświetlaj legendy na wykresie.
  • wykres pudełkowy pokazujący rozkład wartości gdpPercap w podziale na kontynenty.

    • Dodaj do wykresu punkt oznaczający średnią wartość gdpPercap dla każdego kontynentu.
    • Zmień kolejność wyświetlania kontynentów na: Oceania, Europe, Americas, Asia, Africa.
    • Przypisz do każdego kontynentu te same kolory, które zostały przypisane na wykresie słupkowym.
    • Dowolnie sformatuj pozostałe elementy wykresu, zmieniając kolory oraz sposób wyświetlania wartości odstających.
    • Wyśrodkuj tytuł wykresu
  • zależność między produktem krajowym brutto (oś x) a oczekiwaną długością trwania życia dla każdego kontynentu (użyj opcji facet_wrap()).

Formatowanie wykresów:

  • Do każdego z wykonanych wykresów dodaj odpowiedni tytuł oraz opis osi.
  • Przypisz ten sam sposób wyświetlania wykresów (tzw. theme, np. theme_bw, theme_classic, itp.)
  • Każdy wykres zapisz dodatkowo w osobnym pliku (png lub pdf)