Utforska kök: ordmoln
Hoppas du har roligt med att bygga dessa matinspirerade Shiny-appar! Ett praktiskt sätt att visualisera stora mängder data är ordmoln. I den här övningen utökar du Shiny-appen vi byggde tidigare och lägger till en ny flik som visar de mest utmärkande ingredienserna som ett interaktivt ordmoln.

Paketen shiny, dplyr, ggplot2, plotly och
d3wordcloud är redan inlästa. Här är ett praktiskt kodexempel för att skapa ett ordmoln.
d3wordcloud(
words = c('hello', 'world', 'good'),
freqs = c(20, 40, 30),
tooltip = TRUE
)
Den här övningen är en del av kursen
Bygg webbapplikationer med Shiny i R
Övningsinstruktioner
- UI: Lägg till en
d3wordcloudOutput()med namnetwc_ingredientsoch omslut den i etttabPanel(). Det här ska vara det förstatabPanel()i din app. - Server: Rendera ett interaktivt ordmoln över de vanligaste ingredienserna och
antalet recept de används i, med hjälp av
d3wordcloud::renderD3wordcloud()och tilldela det till en utdata med namnetwc_ingredients. Du behöver använda det reaktiva uttrycketrval_top_ingredients()för att returnera en dataram med de vanligaste ingredienserna och antalet recept.
Interaktiv övning med praktiskt arbete
Testa den här övningen genom att slutföra den här exempelkoden.
ui <- fluidPage(
titlePanel('Explore Cuisines'),
sidebarLayout(
sidebarPanel(
selectInput('cuisine', 'Select Cuisine', unique(recipes$cuisine)),
sliderInput('nb_ingredients', 'Select No. of Ingredients', 5, 100, 20),
),
mainPanel(
tabsetPanel(
# CODE BELOW: Add `d3wordcloudOutput` named `wc_ingredients` in a `tabPanel`
tabPanel('Plot', plotly::plotlyOutput('plot_top_ingredients')),
tabPanel('Table', DT::DTOutput('dt_top_ingredients'))
)
)
)
)
server <- function(input, output, session){
# CODE BELOW: Render an interactive wordcloud of top ingredients and
# the number of recipes they get used in, using `d3wordcloud::renderD3wordcloud`,
# and assign it to an output named `wc_ingredients`.
rval_top_ingredients <- reactive({
recipes_enriched %>%
filter(cuisine == input$cuisine) %>%
arrange(desc(tf_idf)) %>%
head(input$nb_ingredients) %>%
mutate(ingredient = forcats::fct_reorder(ingredient, tf_idf))
})
output$plot_top_ingredients <- plotly::renderPlotly({
rval_top_ingredients() %>%
ggplot(aes(x = ingredient, y = tf_idf)) +
geom_col() +
coord_flip()
})
output$dt_top_ingredients <- DT::renderDT({
recipes %>%
filter(cuisine == input$cuisine) %>%
count(ingredient, name = 'nb_recipes') %>%
arrange(desc(nb_recipes)) %>%
head(input$nb_ingredients)
})
}
shinyApp(ui = ui, server= server)