Closed vidamaver closed 6 years ago
Kolikor vidim, tabela površin evropskih držav, ki jo uvažaš, navaja samo površino v Evropi - države, ki ležijo pretežno izven Evrope, so označene z zvezdico (med njimi Turčija), medtem ko Cipra ni v seznamu. Zato v vizualizacija.r
na roko dodaš podatka za ti državi. Države z zvezdico lahko odstraniš, npr.
tabela_povrsin <- tabela_povrsin %>% filter(! grepl("[*]", drzava))
Za prevajanje oznak bo najbolje, če si pripraviš slovar kot vektor z imeni, ki ga v grafih indeksiraš s svojimi vrednostmi, npr.
slovar <- c("Methane" = "Metan",
"Nitrogen oxides" = "Dušikov monoksid",
"Nitrous oxide" = "Didušikov oksid")
g32 <- ggplot(tabela2 %>% filter(tip_izpusta != "Carbon dioxide") %>%
group_by(leto, tip_izpusta) %>%
summarise(izpusti = sum(kolicina_v_tonah, na.rm = TRUE)),
aes(x = leto, y = izpusti / 1e6, color = slovar[tip_izpusta])) + geom_line() +
guides(color = guide_legend(title = "Tip izpusta")) + ylab("izpusti v milijonih ton")
V poročilu je odveč znak +
na začetku vrstice, kjer kličeš shinyAppDir
. Knjižnice DT
verjetno nimaš nameščene, tako da jo namesti (Tools / Install Packages...). Sicer pa to knjižnico potrebuješ samo za prikaz interaktivnih tabel - iz vzorca je ostal klic funkcije DT::dataTableOutput
v ui.R
.
Sicer pa v ui.R
poskrbiš za izgled aplikacije - tja postavi vhodne (*Input
) in izhodne (*Output
) elemente. Vsak ima za prvi argument svoje ime - to se ujema s polji objekta input
oziroma output
v server.R
. Npr. selectInput
z imenom drzava
postavi na želeno mesto v ui.R
, potem pa v output$drzava
(tega definiraj samo enkrat v server.R
- za renderPlot
manjka zavit oklepaj) uporabi input$drzava
za filtriranje po državi (trenutno se sklicuješ na t
, ki pa ni definiran - lahko ga nadomestiš s tvojimi podatki). Potem lahko v ui.R
s plotOutput$drzava
izrišeš graf.
Sem dodala dodatno vrstico za izbris držav z zvezdico, vendar pa imam še vseeno Turčijo in Ciper kar 6x zapisano v tabela.povrsin ...
S slovarjem sedaj deluje, hvala.
Shiny sem poskušala popraviti, vendar še vedno ne vem kaj mi manjka oziroma kaj delam narobe. Sedaj mi javlja napako: object 'output' not found.
Sklepam, da na obstoječih podatkih vsakič znova poganjaš vizualizacija.r
in se ti zato Turčija in Ciper vsakič znova dodasta. V izogib temu svetujem, da dodajanje (in brisanje držav z zvezdico) opraviš v uvoz1.R
, takoj po uvozu razpredelnice.
V ui.R
naj bo samo postavitev gradnikov aplikacije - vse delo (filtriranje, izrisovanje grafov) naj poteka v server.R
. Minimalno delujočo različico lahko dobiš tako, da v server.R
postaviš npr.
library(shiny)
shinyServer(function(input, output) {
output$drzava <- renderPlot({
ggplot(tabela2 %>% filter(drzava == input$drzava) %>% group_by(drzava, leto) %>%
summarise(izpusti = sum(kolicina_v_tonah)) %>% inner_join(tabela_povrsin),
aes(x = leto, y = izpusti/povrsina_v_km2)) + geom_line() +
ggtitle("Zračne emisije na površino izbrane države") +
xlab("leto") + ylab("količina zračnih emisij")
})
})
v ui.R
pa
library(shiny)
shinyUI(fluidPage(
titlePanel("Zračne emisije po državah"),
sidebarPanel(
selectInput("drzava", label = "Izberi državo",
choices = c("Vse", levels(izpusti.povrsina$drzava)))
),
mainPanel(plotOutput("drzava"))
)
)
Sem prestavila vrstici kode v uvoz1.R pa je še vedno enako kot prej, Turčija in Ciper sta navedeni 6x.
V poročilu ko poženem, mi pod možnosti za izbiro države navaja tudi neke države, za katere podatka sploh nimam (npr. Jersey) in mi seveda tudi grafa ne izriše. Lahko to kako popravim, da bodo kot možna izbira možne le države za katere bo dejansko graf izrisalo?
Še enkrat poženi uvoz1.R
in nato vizualizacija.r
- tako se bodo podatki znova uvozili in vrstici se bosta dodali samo enkrat.
Trenutno za seznam držav uporabljaš seznam možnih vrednosti (levels
) faktorske spremenljivke drzava
v razpredelnici izpusti.povrsina
- te so prišle iz zemljevida, zato imaš tam vse države, tudi če zanje nimaš podatkov. Če hočeš uporabiti dejanske vrednosti v tem stolpcu, jih bo treba pretvoriti v nize - to najlažje narediš tako, da levels
nadomestiš s parse_character
.
Najlepša hvala za vso pomoč.
Projekt menim da imam sedaj v končni verziji. Kam naložim ali pustim tako kot je?
Projekt imaš že naložen na GitHubu, tako da bom dodal povezavo na repozitorij za zagovore. S profesorjem se lahko domeniš za termin zagovora.
Imam samo še dve pripombi:
vizualizacija.r
, dobim opozorilo v zvezi s knjižnicami za delo z zemljevidi. Da se ti to ne izpiše v poročilo, v glavo bloka kode dodaj še parameter warning = FALSE
.server.R
dodaš stavek if
, ki bo preveril, ali je izbrana ta opcija in potem narisal ustrezen graf.Sem popravila, sedaj sem nastavila na Slovenia, vendar mi ne izriše nič, ko poženem poročilo. Sedaj je samo prazno in možno za izbiro države ...
Privzeto izbiro določiš s parametrom selected
, npr.
selectInput("drzava", label = "Izberi državo:",
choices = parse_character(izpusti.povrsina$drzava),
selected = "Slovenia")
Tako bo tudi Slovenija na svojem mestu po abecedni ureditvi.
Hvala, izgleda sedaj ok?
Sedaj izgleda OK, tako da bom posodobil povezavo. Če boš še kaj spreminjala, mi javi, da to ponovno storim.
Morda še ena pripomba: pri stolpčnih grafih g42
in g43
ti na levi odreže oznake, zato svetujem, da povečaš kot rotacije besedila (morda celo na 90 stopinj). Da ne bodo zelo dolge oznake vzele preveč prostora, lahko vanje vrineš prelom vrstice (\n
), npr.
"Dejavnosti socialnega dela\nin varstva za človekove pravice"
Sem popravila.
V redu, sem posodobil.
Pozdravljeni,
v tabela_povrsin in izpusti.povrsina imam večkratne podatke za Ciper in Turčijo in ne vem zakaj, oziroma ne vem, kako bi to popravila.
Pri grafu g32 sem angleške oznake v legendi skušala preimenovati v Slovenščino, pa mi ne gre skozi, nekaj imam očitno narobe?
Največ težav pa imam s shiny-jem. Rada bi naredila "aplikacijo", kjer izbereš državo, prikaže pa skupne izpuste glede na površino te države in sicer na x - osi bi imela leta, na y - osi pa količino teh izpustov. Tako bi za vsako državo videla trende padanja ali morebitnega naraščanja zračnih emisij. Ko trenutno poženem mi napiše: There is no package called 'DT'.
Lep pozdrav