8  Formatowanie wykresów

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

Elementy formatowania wykresów:

8.1 Zmiana koloru, kształtu oraz wielkości punktów

W R sposób wyświetlania punktu (kształt) kodowany jest za pomoca numeru.

ggplot(data=dane2007, aes(x=gdpPercap, y=lifeExp)) +
  geom_point(size = 3, color = "red", shape = 15)

Wyświetl wykres zależności zmiennych lifeExp od gdpPercap używając kształtu wypełnionego trójkąta o kolorze zielonym i wielkości 2.

Solution

Rozwiązanie:

ggplot(data=gapminder, aes(x=gdpPercap, y=lifeExp)) +
  geom_point(size = 2, color = "green", shape = 17) 

8.2 Zmiana koloru oraz grubości linii

ggplot(data = gapminder, aes(x = year, y = lifeExp)) + 
  stat_summary(fun = "mean", geom = "line", 
               color = "orange", lwd = 2, linetype = "dotted" )

Zmień kolor linii na zielony, typ: linia kreskowa, grubość: 3

Solution

Rozwiązanie:

ggplot(data = gapminder, aes(x = year, y = lifeExp)) + 
  stat_summary(fun = "mean", geom = "line", 
               color = "darkgreen", lwd = 3, linetype = "dashed" ) 

8.3 Modyfikacjia wykresu względem wartości zmiennej

Wykresy mogą być modyfikowane na podstawie wartości zmiennej. W tym celu można posłużyć się atrybutami:

  • kolor (color)
  • kształt (shape)
  • wielkość (size)
ggplot(data=dane2007, aes(x=gdpPercap, y=lifeExp, shape = continent)) + 
  geom_point()

ggplot(data=dane2007, aes(x=gdpPercap, y=lifeExp, color = continent)) + 
  geom_point()

ggplot(data=dane2007, aes(x=gdpPercap, y=lifeExp, color = pop)) + 
  geom_point()

ggplot(data=dane2007, aes(x=gdpPercap, y=lifeExp, size = pop)) + geom_point()

Zwizualizować zależnośc między długością trwania życia a liczbą ludności w Azji w 1952 roku. Wykorzystaj zmienną gdpPercap do przypisania kolorów do poszczególnych punktów.

Solution

Rozwiązanie:

gapminder %>% 
  filter(continent == 'Asia' & year == 1952) %>% 
  ggplot(aes(x=lifeExp, y=pop, color = gdpPercap)) + 
  geom_point()

8.4 Tytuł wykresu

Tytuł wykresu można dodać używając ggtitle lub argumentu title wewnątrz labs

ggplot(data=dane2007, aes(x=gdpPercap, y=lifeExp)) +
  geom_point() + 
  labs(x = "PKB na osobę (USD)", 
       y = "Oczekiwana dalsza długość trwania życia") + 
  ggtitle("Zależność między oczekiwaną długością trwania życia, a PKB w 2007 roku")
ggplot(data=dane2007, aes(x=gdpPercap, y=lifeExp)) +
  geom_point() + 
  labs(x = "PKB na osobę (USD)", 
       y = "Oczekiwana dalsza długość trwania życia", 
       title = "Zależność między oczekiwaną długością trwania życia, a PKB w 2007 roku")

Zwizualizować zależnośc między długością trwania życia a PKB używając danych z Europy i Azji. Wykorzystaj zmienną continent do przypisania kolorów do poszczególnych punktów. Dodaj odpowiedni tytuł do wykresu oraz podpisy osi.

Solution

Rozwiązanie:

gapminder %>% 
  filter(continent %in% c('Europe', 'Asia')) %>% 
  ggplot(aes(x=gdpPercap, y=lifeExp, color = continent)) + 
  geom_point() + 
  labs(x = "PKB na osobę (USD)", 
       y = "Oczekiwana dalsza długość trwania życia", 
       title = "Zależność między oczekiwaną długością trwania życia, a PKB w Europie i Azji")

8.5 Formatowanie osi

8.5.1 Etykiety osi

Argument labs pozwala na dodanie do wykresów etykiet osi oraz tytułu.

ggplot(data=dane2007, aes(x=gdpPercap, y=lifeExp)) +
  geom_point() + 
  labs(x = "PKB na osobę (USD)", y = "Oczekiwana dalsza długość trwania życia")

8.5.2 Zakres

ggplot(data=dane2007, aes(x=gdpPercap, y=lifeExp)) +
  geom_point() + 
  labs(x = "PKB na osobę (USD)", y = "Oczekiwana dalsza długość trwania życia") + 
  lims(x = c(0, 10000))

Zwizualizować zależnośc między długością trwania życia a PKB w Azji w 1952 i 2007 roku. Wykorzystaj zmienną year do przypisania kolorów do poszczególnych punktów. Dodaj tytuł do wykresu, etykiety osi. Ogranicz zakres PKB do 60000

Hint

Zamień zmienną year na factor, aby przypisać kolor na podstawie roku 1952 i 2007. color = as.factor(year)

Solution

Rozwiązanie:

gapminder %>% 
  filter(continent == 'Asia' & year %in% c(1952, 2007)) %>% 
  ggplot(aes(x=lifeExp, y=gdpPercap, color = as.factor(year))) + 
  geom_point() + 
  labs(x = "Oczekiwana dalsza długość trwania życia", 
       y = "PKB na osobę (USD)",
       title = "Zależność między oczekiwaną długością trwania życia a PKB w Azji w 1952 i 2007 roku") + 
  lims(y = c(0, 60000))
  

8.5.3 Skale

ggplot(data=dane2007, aes(x=gdpPercap, y=lifeExp)) +
  geom_point() + 
  scale_x_continuous(name = "PKB na osobę w USD", 
                     breaks = seq(0, 50000, 5000)) + 
  scale_y_continuous(name = "Oczekiwana długość trwania życia", 
                     limits = c(0, 100),
                     breaks = seq(0, 100, 20))

ggplot(data=dane2007, aes(x = continent, y = lifeExp)) +
  geom_boxplot() + 
  labs(x = "Oczekiwana długość trwania życia") + 
  scale_x_discrete(name = "Kontynenty", 
                   labels = c(
                     "Africa" = "Afryka", 
                     "Americas" = "Ameryka Płn. i Płd.", 
                     "Asia" = "Azja", 
                     "Europe" = "Europa", 
                     "Oceania" = "Australia i Oceania"))

8.5.4 Skala logarytmiczna

ggplot(data = dane2007, aes(x = pop, y = lifeExp)) +
  geom_point() +
  labs(x = "Liczba ludności", y = "Oczekiwana długość trwania życia") + 
  scale_x_log10()

8.5.5 Odwrócenie osi

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

8.5.6 Sortowanie

library(forcats)
ggplot(data =dane2007, aes(x = fct_infreq(continent))) +
  geom_bar()

ggplot(data = dane2007, aes(x = fct_reorder(continent, lifeExp, median), y = lifeExp)) +
  geom_boxplot()

8.6 Skale kolorystyczne

8.6.1 Skale kolorystyczne dla zmiennej jakościowej

Więcej: https://sjspielman.github.io/introverse/articles/color_fill_scales.html

  • scale_color_manual oraz scale_fill_manual pozwala na samodzielne zdefiniowanie kolorów. Można także przypisać wektor z nazwami kategorii - wtedy kolor zostanie przypisany do danej kategorii.
ggplot(data=dane2007, aes(x=gdpPercap, y=lifeExp, color = continent)) +
  geom_point() + 
  labs(x = "PKB na osobę (USD)", y = "Oczekiwana dalsza długość trwania życia") + 
  scale_color_manual(values = c("orange", "darkgreen", "lightgreen","blue", "purple"))

ggplot(data=dane2007, aes(x=gdpPercap, y=lifeExp, color = continent)) +
  geom_point() + 
  labs(x = "PKB na osobę (USD)", y = "Oczekiwana dalsza długość trwania życia") + 
  scale_color_manual(values = c("Africa" = "orange", 
                                "Americas" = "red",
                                "Asia" = "blue",
                                "Europe" = "purple",
                                "Oceania" = "green"))

ggplot(data=dane2007, aes(x = continent, y = lifeExp, fill = continent)) +
  geom_boxplot() + 
  labs(x = "Oczekiwana długość trwania życia") + 
  scale_fill_manual(values = c("blue", "orange", "magenta", "yellow", "green"))

Zwizualizować zależnośc między długością trwania życia a PKB w Azji w 1952 i 2007 roku. Wykorzystaj zmienną year do przypisania kolorów do poszczególnych punktów. Przypisz kolor pomarańczowy do roku 1952 oraz kolor granatowy do roku 2007. Dodaj tytuł do wykresu, etykiety osi.

Solution

Rozwiązanie:

gapminder %>% 
  filter(continent == 'Asia' & year %in% c(1952, 2007)) %>% 
  ggplot(aes(x=lifeExp, y=gdpPercap, color = as.factor(year))) + 
  geom_point() + 
  labs(x = "Oczekiwana dalsza długość trwania życia", 
       y = "PKB na osobę (USD)",
       title = "Zależność między oczekiwaną długością trwania życia a PKB w Azji w 1952 i 2007 roku") + 
  scale_color_manual(values = c("1952" = "orange", 
                                "2007" = "blue"))
  
  • scale_color_brewer oraz scale_fill_brewer z pakietu RColorBrewer pozwala na zdefiniowanie jednej z palet dostarczanych przez pakier RColorBrewer. Dostępne palety w pakiecieRColorBrewer`.
RColorBrewer::display.brewer.all()
library(RColorBrewer)
ggplot(data=dane2007, aes(x=gdpPercap, y=lifeExp, color = continent)) +
  geom_point() + 
  labs(x = "PKB na osobę (USD)", y = "Oczekiwana dalsza długość trwania życia") + 
  scale_color_brewer(palette = "Set1")

ggplot(data=dane2007, aes(x = continent, y = lifeExp, fill = continent)) +
  geom_boxplot() + 
  labs(x = "Oczekiwana długość trwania życia") + 
  scale_fill_brewer(palette = "Set1")

ggplot(data=dane2007, aes(x = continent, y = lifeExp, fill = continent)) +
  geom_boxplot() + 
  labs(x = "Oczekiwana długość trwania życia") + 
  scale_fill_brewer(palette = "YlGn", direction = -1)

  • scale_color_discrete_qualitative oraz scale_fill_discrete_qualitative z pakietu colorspace (https://colorspace.r-forge.r-project.org/articles/ggplot2_color_scales.html)
library(colorspace)
ggplot(data = dane2007, aes(x = gdpPercap, y = lifeExp, color = continent)) +
  geom_point() +
  scale_color_discrete_qualitative(palette = "Dynamic")

ggplot(data=dane2007, aes(x = continent, y = lifeExp, fill = continent)) +
  geom_boxplot() + 
  labs(x = "Oczekiwana długość trwania życia") + 
  scale_fill_discrete_qualitative(palette = "Harmonic")

Wykonaj wykres pudełkowy dla zmiennej gdpPercap względem lat. Pokoloruj pudełka, podpisz osie oraz dodaj tytuł do wykresu.

Solution

Rozwiązanie:

ggplot(data = gapminder, aes(x = factor(year), y = gdpPercap, fill = factor(year))) +
  geom_boxplot() + 
  labs(
    x = "Rok",
    y = "PKB na osobę (USD)",
    title = "Wartość PKB w latach 1952–2007"
  ) + 
  scale_fill_brewer(palette = "Set3")

8.6.2 Skale kolorystyczne dla zmiennej ilościowej

  • scale_colour_gradient
ggplot(data=dane2007, aes(x=gdpPercap, y=lifeExp, color = pop)) +
  geom_point() + 
  labs(x = "PKB na osobę (USD)", y = "Oczekiwana dalsza długość trwania życia", color = "Kontynent") + 
  scale_colour_gradient(low = "orange", high = "brown")

  • scale_color_continuous_sequential z pakietu colorspace
ggplot(data=dane2007, aes(x=gdpPercap, y=lifeExp, color = pop)) +
  geom_point() + 
  labs(x = "PKB na osobę (USD)", y = "Oczekiwana dalsza długość trwania życia") + 
   scale_color_continuous_sequential(palette = "YlOrRd")

ggplot(data =dane2007, aes(x = gdpPercap, y = lifeExp, color = pop)) +
  geom_point() +
    labs(x = "PKB na osobę (USD)", y = "Oczekiwana dalsza długość trwania życia", color = "Liczba ludności") + 
  scale_color_continuous_sequential(trans = "log10", labels = scales::label_comma(), palette = "YlOrRd")

Wykonaj wykres ilustrujący zależność między PKB na osobę, a długością trwania życia. Pokoloruj punkty względem zmienej pop. Użyj dowolnej palety.

Solution

Rozwiązanie:

ggplot(data=dane2007, aes(x=gdpPercap, y=lifeExp, color = pop)) +
  geom_point() + 
  labs(x = "PKB na osobę (USD)", y = "Oczekiwana dalsza długość trwania życia") + 
   scale_color_continuous_sequential(palette = "Greens")

8.7 Tekst na wykresach

ggplot(data = dane2007, aes(x = gdpPercap, y = lifeExp, color = continent)) +
  geom_point() +
  geom_text(aes(label = country), check_overlap = TRUE)

library(ggrepel)
ggplot(data = dane2007, aes(x = gdpPercap, y = lifeExp, color = continent)) +
  geom_point() +
  geom_text_repel(aes(label = country), max.overlaps = 3)
Warning: ggrepel: 138 unlabeled data points (too many overlaps). Consider
increasing max.overlaps

8.8 Motywy

Motywy (ang. theme) pozwalają na modyfikację i dostosowanie komponentów wykresów, takich jak tytuł, etykiety, tło, wielkość czcionki, położenie legendy itd. Istnieją wbudowane rozwiązania, np. theme_bw(), theme_classic(), theme_light(), theme_minimal(). Można także użyć funkcji theme() i dowolnie zmodyfikować każdy element.

ggplot(data=dane2007, aes(x=gdpPercap, y=lifeExp, color = continent)) +
  geom_point() + 
  labs(x = "PKB na osobę w USD", y = "Oczekiwana długość trwania życia", 
       title = "Zależność między oczekiwaną długością trwania życia\na PKB na osobę w 2007 roku") + 
  theme_bw()

ggplot(data=dane2007, aes(x=gdpPercap, y=lifeExp, color = continent)) +
  geom_point() + 
  labs(x = "PKB na osobę w USD", y = "Oczekiwana długość trwania życia", labs = "", 
       title = "Zależność między oczekiwaną długością trwania życia\na PKB na osobę w 2007 roku") + 
  scale_color_brewer(name = "Kontynent", palette = "Set1", 
                     labels = c("Africa" = "Afryka", "Americas" = "Ameryka N/S", "Asia" = "Azja", "Europe" = "Europa", "Oceania" = "Australia i Oceania")) + 
  theme_bw() + 
  theme(text=element_text(size=13), 
        legend.position = "bottom", 
        legend.title = element_text(face = "bold"))

Wykonaj wykres pudełkowy dla zmiennej gdpPercap w podziale na kontynenty. Zdefiniuj kolory, które mają być przypisane poszczególnym kontynentom. Podpisz osie oraz dodaj tytuł do wykresu. Wybierz motyw. Ustaw legendę na dole (pod wykresem). Zmień nazwy kontynentów na polsie nazwy.

Solution

Rozwiązanie:

scale_x_discrete: pozwala na zmianę etykiet osi x (z nazw angielskich na polskie) scale_fill_manual: formatowanie legendy oraz sposobu wyświetlania (values - przypisanie kolorów do kontynentów, labels - etykiety w legendzie) labs: formatowanie podpisów osi oraz tytułu wykresu

ggplot(data=gapminder, aes(x = continent, y = gdpPercap, fill = continent)) +
  geom_boxplot() + 
  labs(y = "PKB na osobę (USD)",
       x = "Kontynent",
       title = "Wartość PKB wg kontynentów") + 
  scale_x_discrete(labels = c("Africa" = "Afryka", 
                             "Americas" = "Ameryka N/S", 
                             "Asia" = "Azja", 
                             "Europe" = "Europa", 
                             "Oceania" = "Australia i Oceania")) + 
  scale_fill_manual(name = "Kontynenty", values = c("Africa" = "orange", 
                               "Americas" = "red",
                               "Asia" = "blue",
                               "Europe" = "purple",
                               "Oceania" = "green"),
                    labels = c("Africa" = "Afryka", 
                               "Americas" = "Ameryka N/S", 
                               "Asia" = "Azja", 
                               "Europe" = "Europa", 
                               "Oceania" = "Australia i Oceania")) + 
  theme_bw() + 
  theme(text=element_text(size=13), 
        legend.position = "bottom", 
        legend.title = element_text(face = "bold"))