Closed anamavsenik closed 6 years ago
Najprej predlagam, da pri uvozu razpredelnic minimalne_place_v_evropi
in izdatki_za_potovanja
poskrbiš, da je leto
številska spremenljivka - pri mutate
, kjer to poskrbiš za plače oziroma izdatke, torej dodaj še parameter leto = parse_number(leto)
. Če želiš potem v grafu EUminimum
ohraniti diskretno barvno lestvico za leta, pri aes
uporabi parameter color = factor(leto)
. Naslov legende za leto lahko potem popraviš tako, da grafu prišteješ npr. guides(color = guide_legend("Leto"))
.
Svetujem, da Shiny aplikacijo organiziraš kot v vzorcu - v ui.R
naj bo samo uporabniški vmesnik, v server.R
pa naj poteka dejansko izrisovanje grafov glede na vhod iz uporabniškega vmesnika. Potrebne podatke si pripravi že v preostalih programih. Tako bo najbolje, če že v uvoz.r
narediš
povpr.place.stat.reg. <- separate(povpr.place.stat.reg., starost,
into = c("regija", "starost"), sep=",")
Potem v vizualizacija.r
pripraviš podatke za izris v poročilu:
povpr.place.stat.reg.n <- povpr.place.stat.reg.%>%
filter(spol == "Spol - SKUPAJ", starost == "Starost - SKUPAJ", regija != "SLOVENIJA") %>%
group_by(regija) %>% summarise(povprecje = mean(povpr.placa))
Tako ne prepišeš razpredelnice povpr.place.stat.reg.
, ki jo boš potrebovala v Shinyju. V poročilu potem seveda popravi, da izrisuješ iz povpr.place.stat.reg.n
.
Da prikažeš tako graf kot zemljevid (vsakega v svojem zavihku), naj bo v ui.R
npr.
library(shiny)
shinyUI(fluidPage(
tabsetPanel(
tabPanel("Minimalne plače in izdatki za potovanja",
sidebarPanel(
selectInput("drzava",
label = "Izberite državo",
choices = sort(unique(primerjava_tabel$DRZAVA)),
selected = "Slovenia")
),
mainPanel(plotOutput("graf.min"))
),
tabPanel("Povprečne plače po regijah",
titlePanel("Povprečne plače po regijah v letih 2008-2016"),
sidebarPanel(
selectInput("leto",
label = "Izberite leto",
choices = 2008:2016,
selected = 2016)
),
mainPanel(plotOutput("zemljevid"))
)
)
))
Tukaj torej samo določiš vhodne elemente (z imenoma drzava
in leto
) ter izhodne elemente (z imenoma graf.min
in zemljevid
), ki se bodo izrisali v server.R
:
library(shiny)
shinyServer(function(input, output) {
output$graf.min <- renderPlot({
ggplot(primerjava_tabel %>% filter(DRZAVA == input$drzava)) +
aes(x = leto, y = place, size = izdatki) + geom_point() +
ggtitle("Minimalne plače in izdatki za potovanja")
})
output$zemljevid <- renderPlot({
ggplot() + geom_polygon(data = povpr.place.stat.reg. %>% filter(spol == "Spol - SKUPAJ",
starost == "Starost - SKUPAJ",
regija != "SLOVENIJA",
leto == input$leto) %>%
right_join(zemljevid, by = c("regija" = "IME")),
aes(x = long, y = lat, group = group, fill = povpr.placa))
})
})
Vrednosti vhodnih elementov torej dobiš kot polja v objektu input
, izhodne elemente pa z ustreznimi funkcijami render*
podaš kot polja objekta output
.
Potem lahko aplikacijo Shiny vključiš v poročilo kot
```{r shiny, echo = FALSE}
shinyAppDir("shiny", options=list(width="100%", height=500))
```
V glavi poročila potem tudi odkomentiraj vrstico runtime: shiny
- če tega ne storiš, bo ob prevajanju ugotovilo, da imaš Shiny, in te vprašalo, ali ga želiš pognati kot Shiny - če odgovoriš Yes, Always, bo to vrstico samo dodalo.
Ali je v redu da mi pri vizualizaciji in pri shiny, ko riše zemljevid vedno javi napako:
Warning: Column regija
/IME
joining character vector and factor, coercing into character vector ?
To je samo opozorilo, ker imaš v zemljevidu za imena faktor, v podatkih pa imaš imena regij v znakovnem stolpcu. Če vse deluje pravilno in dovolj hitro, potem lahko tako opozorilo ignoriraš. Če se ti pa zdi, da je izrisovanje prepočasno, lahko poskrbiš, da imaš tudi v podatkih faktor z istimi vrednostmi kot v zemljevidu (v ta namen lahko uporabiš funkcijo parse_factor
- potem se imena notranje shranijo kot številke in je zato primerjava imen hitrejša).
Projekt sem dokončala, zanima me, če bi svetovali še kakšne popravke. Sicer pa je pripravljen za oddajo.
Lp, Ana Marija Kravanja
V redu, bom dodal povezavo na repozitorij za zagovore, tako da se lahko z @alenFMF domeniš za termin zagovora. Če boš še kaj spreminjala, mi prosim javi, da posodobim povezavo.
Predlagal bi samo dva lepotna popravka:
height
, da bo celotna aplikacija vidna brez drsnika.#
(pusti presledek pred naslovom) in dodaj še prazno vrstico za njim (tako kot pri ostalih naslovih).Najlepša hvala. Sem že spremenila.
V redu, sem dodal povezavo na zadnji commit.
Pozdravljeni!
Imam dve težavi. Zanima me, na kakšen način bi lahko naredila kot imam pri zadnjem grafu v poročilu, da bi bilo tudi pri orodju shiny takšen graf. Torej na x osi bi bila leta, na y plače, velikost balončka bi bili izdatki, uporabnik pa bi si sam izbral državo za katero želi sledeč prikaz. Prav tako sem poskusila v datoteki Ui napisati funkcijo, ki bi pretvarjala zemljevid glede na izbrano leto, a imam težave pri povezovanju drsnika s samo tabelo, torej od kod naj bere podatke za prikaz.
Hvala in lep pozdrav, Ana Marija Kravanja