library(ggplot2) set.seed(1234) #ziarno startowe do generowania liczb losowych # wygeneruj ramke danych zawierającą 2 zmienne losowe (kobiety, mężczyźni), zawierające po 200 obserwacji wagi, ze średnią 55 oraz 58 osoby <- data.frame( plec = factor(rep(c('K','M'), each = 200)), waga = c(rnorm(200, 55), rnorm(200, 58)) ) # boxplot, przedstawiający wyniki qplot(x = plec, y = waga, data = osoby, geom='boxplot') # rozdziel kolory, ze względu na płeć qplot(x = plec, y = waga, data = osoby, geom='boxplot', fill=plec) # usuń szare tło qplot(x = plec, y = waga, data = osoby, geom='boxplot', fill=plec) + theme_bw() # zmień kształt na 'violin' qplot(x = plec, y = waga, data = osoby, geom = 'violin', fill = plec) # zamień kształt na punkty, wyśrodkuj, dopasuj wielkość kropek qplot(plec, waga, data = osoby, geom='dotplot', fill = plec, stackdir = 'center', binaxis = 'y', dotsize = 0.75, binwidth = 0.25) # histogram qplot(waga, data = osoby, geom = 'histogram', fill = plec) #zmieniamy kształt i dodajemy przezroczystość qplot(waga, data = osoby, geom = 'density', color = plec, fill = plec, alpha = 0.5) #tworze obiekt typu lista ""ggplot"" osoby_baza <- ggplot(data = osoby, aes(x = waga)) class(osoby_baza) #dodge - osobno słupki dla płci osoby_baza + geom_histogram(aes(color = plec), fill = 'white', position = 'dodge') ?geom_histogram #wykres dla listy osoby_baza, kształt - histogram, wypełnienie uzależnione od płci (zapisanej binarnie "bin"), z paletą kolorów "blues" osoby_baza + geom_histogram(aes(fill = plec), stat='bin') + scale_fill_brewer(palette='Blues') #wykres dla listy osoby_baza, kształt - area, wypełnienie uzależnione od płci (zapisanej binarnie "bin"), z paletą kolorów "Dark2" oraz minimalnym tłem "+ theme_minimal()" osoby_baza + geom_area(aes(fill = plec), stat='bin') + scale_fill_brewer(palette='Dark2') + theme_minimal() # dodatkowo uzależnij typ linii od płci osoby_baza + geom_area(aes(fill = plec, linetype = plec, col=plec), stat='bin') + scale_fill_brewer(palette='Dark2') + theme_bw() #palety kolorów #The following palettes are available for use with these scales: #Diverging #BrBG, PiYG, PRGn, PuOr, RdBu, RdGy, RdYlBu, RdYlGn, Spectral #Qualitative #Accent, Dark2, Paired, Pastel1, Pastel2, Set1, Set2, Set3 #Sequential #Blues, BuGn, BuPu, GnBu, Greens, Greys, Oranges, OrRd, PuBu, PuBuGn, PuRd, Purples, RdPu, Reds, YlGn, YlGnBu, YlOrBr, YlOrRd #http://colorbrewer2.org/ library(dplyr) #zapisz średnie wagi dla grup srednie <- osoby %>% group_by(plec) %>% summarise(srednia_grupy = mean(waga)) ## prosty rozkład z dodanymi przerywanymi liniami obrazującymi średnie osoby_baza + geom_density(aes(color = plec)) + geom_vline(data = srednie, aes(xintercept = srednia_grupy, color = plec), linetype = 'dashed') + scale_x_continuous(NULL, expand=c(0,0)) + scale_y_continuous(NULL, expand=c(0,0)) + theme(legend.position = 'none') ## poprawiamy wykres - ustawiam kolory, dpodaję podtytuł i stopkę, axis.ticks.y - usuwa podziałkę osi,axis.line - obrysowuje czarną linią, panel.background - usuwa tło #ustawiam skalę, ograniczam ją i nadaję etykiety, pochylam tekst, jeśli dodam na końcu "+theme(legend.title = element_blank()) usunę nazwę legendy osoby_baza + geom_density(aes(color = plec)) + geom_vline(data = srednie, aes(xintercept = srednia_grupy, color = plec), linetype = 'dashed') + scale_color_manual(values=c('#999999','#E69F00')) + labs(title = 'Histogram wagi', subtitle = 'grupa kontrolna', caption = '(c) A.G.') + ylab('kontrola') + theme(axis.ticks.y = element_blank(), axis.text.y = element_blank(), axis.ticks.x = element_blank()) + theme(axis.line = element_line(colour = 'black'), panel.background = element_blank()) + scale_x_continuous(breaks = seq(51,62,1), limits = c(51,62), labels = paste(seq(51,62,1),'kg')) + theme(axis.text.x = element_text(angle = 45)) ###SAMOCHODY data(mtcars) #wczytuję 3 kolumny bazy mtcars jako obiekt auta auta <- mtcars[,c('mpg','cyl','wt')] # sprawdzam typ zmiennej class(auta$cyl) # zamieniam numeric na factor auta$cyl <- factor(auta$cyl) class(auta$cyl) ?mtcars #wykres zależności mpg od wt qplot(y = mpg, x = wt, data = auta, geom = c('point','smooth')) #skoro cyl jest zmienną typu factor, uzależniam od niej kolor i kształt punktów qplot(y = mpg, x = wt, data = auta, geom = c('point'), colour = cyl, shape = cyl) data(mpg) ?mpg #tworzę obiekt auta_baza auta_baza <- ggplot(data = mpg, aes(x = class)) # tworzę wykres słupkowy "bar", golory uzależnim od zmiennej drv, pochylam podpisy auta_baza + geom_bar() + aes(color = drv, fill = drv) + theme(axis.text.x = element_text(angle = 45)) library(reshape2) library(hexbin) #rozrzut punktowy - bins - wielkość punktów diamenty_baza + geom_hex(bins=100) data(faithful) #tworzę zmienną dotyczącą erupcji wulkanów gejzer_baza <- ggplot(faithful, aes(x = eruptions, y = waiting)) #podstawowy rozrzut punktowy, z zaznaczonymi liniami podziału od 2 centrów gejzer_baza + geom_point() + geom_density_2d() # wypełniamy gradientem kolorów gejzer_baza + geom_density_2d_filled(alpha=0.4) + geom_density_2d() # dodaj na końcu "+ theme(legend.position = 'none')" żeby usunąć legendę #tworzymy jeszcze raz obiekt o wybuchach wulkanów z wypełnieniem dla gęstości, usuwam niepotrzebne elementy gejzer_baza <- ggplot(faithfuld, aes(x = eruptions, y = waiting, fill = density)) + geom_raster() + scale_x_continuous(NULL, expand=c(0,0)) + scale_y_continuous(NULL, expand=c(0,0)) + theme(legend.position = 'none') # wypełniam różnymi gradientami : usruchom każdą linijkę osobno gejzer_baza + scale_fill_viridis_c() gejzer_baza + scale_fill_viridis_c(option = 'magma') gejzer_baza + scale_fill_distiller() gejzer_baza + scale_fill_distiller(palette = 'PuRd') gejzer_baza + scale_fill_distiller(palette = 'YlOrBr') #Mapy library(maps) #wczytuję dane do obiektu world_map world_map <- map_data('world') # tworzę mapę świata z wczytanych danych ggplot(world_map, aes(x = long, y = lat, group = group)) + geom_polygon(fill = 'lightgrey', colour = 'black') #tworzę wekrot "kraje" kraje = c('Portugal','Spain','France', 'Switzerland','Germany','Austria', 'Belgium','Netherlands','Denmark', 'Poland','Italy','Croatia','Slovenia', 'Hungary','Slovakia','Czech Republic') #tworzę obiekt eu_map tylko dla wybranych krajów eu_map <- map_data('world', region = kraje) # dodaję informację o liczbie mieszkańców population <- data.frame( pop = c(10.6,40.4,62.8,7.5,82.4,20.3,10.4,16.5,5.5,38.5,58.1, 4.5,2,10,5.4,10.2), region = kraje ) # inner_join - połącz obiekty eu_map = inner_join(eu_map, population, by = 'region') #stwórz mapę europy z gradientem odpowiadającym gęstości populacji oraz etykietami z nazwami państw, bez legendy region.lab.data <- eu_map %>% group_by(region) %>% summarise(long = mean(long), lat = mean(lat)) ggplot(eu_map, aes(x = long, y = lat)) + geom_polygon(aes(group = group, fill = pop)) + geom_text(aes(label = region), data = region.lab.data, size = 3, hjust=0.5) + scale_fill_gradient(limits=c(0,100), low = 'yellow', high = 'red', space = 'Lab', guide = 'colourbar') + theme_void() + theme(legend.position = 'none')