Zadanie 1

Zadanie: Zobrazte dataset carData::UN pomocou interaktívnej tabuľky. Zapnite jej filter stĺpcov, nastavte východzí počet 15 riadkov na stranu a pridajte názov (caption).

Riešenie:

suppressWarnings({ 
  library(ggvis)
  library(DT)
  library(plotly)
  library(ggplot2)
  library(crosstalk)
  library(shiny)
})
         
data <- carData::UN

datatable(data, options = list(pageLength = 15), caption = "UN Data") %>% formatRound(which(sapply(data, is.numeric)), digits = 3)

Zadanie 2

Zadanie: Pomocou plotly vytvorte (a.) bodový graf závislosti medzi HDP a priemernou dĺžkou života s farebným odlíšením skupiny krajín a veľkosťou bodov 20. Postupne zobrazte (premennú) percento mestskej populácie najprv (b.) na grafický atribút veľkosť bodov, potom (c.) na tretiu os kartézskeho systému a nakoniec (d.) na časovú os (čiže vznikne animácia). Výsledkom druhej úlohy tak budú 4 grafy.

Riešenie:

p1 <- plot_ly(data, x = ~lifeExpF, y = ~ppgdp, color = ~group, size = 20, type = 'scatter', mode = 'markers') |>
  layout(
    title = "(a) Závislosť HDP od lifeExpF",
    legend = list(title = list(text = '<b> Groups </b>')))
p1
p2 <- plot_ly(data, x = ~lifeExpF, y = ~ppgdp, color = ~group, size = ~pctUrban, type = 'scatter', mode = 'markers') |>
  layout(
    title = "(b) Závislosť HDP od lifeExpF ",
    legend = list(title = list(text = '<b> Groups </b>')))
p2
p3 <- plot_ly(data, x = ~pctUrban, y = ~lifeExpF, z = ~ppgdp, color = ~group, type = 'scatter3d', mode = 'markers') |>
  layout(
    title = "(c) Závislosť HDP od lifeExpF a pctUrban",
    legend = list(title = list(text = '<b> Groups </b>')))
p3
p4 <- plot_ly(data, x = ~lifeExpF, y = ~ppgdp, color = ~group, frame = ~pctUrban, type = 'scatter', mode = 'markers')|>
  layout(
    title = "(d) Animacia závislosťy HDP od lifeExpF a pctUrban",
    legend = list(title = list(text = '<b> Groups </b>')))
p4

Zadanie 3

Zadanie: Pomocou balíku crosstalk prepojte interaktívnu tabuľku údajov s bodovým grafom HDP vs. dĺžka života (napr. funkciou d3scatter::d3scatter, alebo plot_ly) a pridajte interaktívne filtračné prvky (zaškrtávacie políčka, posuvník a výberové menu) namapované na vhodné premenné podľa vášho výberu. Pokúste sa tabuľku a graf umiestniť vedľa seba, tabuľke nastavte vhodnú výšku.

Riešenie:

shared_data <- SharedData$new(data) 

# Vytvorenie interaktivnej tabulky
dt <- datatable(shared_data, options = list(pageLength = 15), caption = "UN Data") %>%
  formatRound(columns = which(sapply(data, is.numeric)), digits = 3)

# Vytvorenie bodoveho grafu GPD a Dlzka zivota
plot <- plot_ly(shared_data, x = ~ppgdp, y = ~lifeExpF, type = 'scatter', mode = 'markers', 
                text = ~region, marker = list(size = 10)) %>%
  layout(title = 'HDP vs. Dĺžka života', xaxis = list(title = 'HDP na obyvateľa'), 
         yaxis = list(title = 'Dĺžka života'))

# Vytvorenie filtrovacich prvkov
filter_region <- filter_select("region", "Filter_region", shared_data, ~region)
filter_lifeExpF <- filter_slider("lifeExpF", "Filter_lifeExpF", shared_data, ~lifeExpF, width = '100%')
filter_group <- filter_checkbox("group", "Filter_group", shared_data, ~group, inline = TRUE)

# Variant 1
#bscols(filter_region, filter_lifeExpF, filter_group)
#bscols(plot)
#bscols(dt)

# Variant 2
bscols(widths = c(4,4), filter_region, filter_lifeExpF, filter_group)
bscols(widths = c(12,12), dt, plot)
# Usporiadanie filtrovacich prvkov, tabulky a grafu vertikalne cez Shiny, ale ne paci mi to
#ui <- fluidPage(
#  fluidRow(column(12, filter_region, filter_lifeExpF, filter_group)),
#  fluidRow(column(12, plot)),
#  fluidRow(column(12, dt))
#)

#shinyApp(ui = ui, server = function(input, output) {})