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: 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: 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) {})