Author: Zhenxing Cheng
Date: 2019-08-06

# Rendering Word Clouds

#### Zhenxing Cheng

#### 2019-08-06

# Introduction

The htmlwidgets package is very interesting and powerful. All the time, I want to write my own html widgets, but I failed. This is my third try, finally I success! As I first try of using `htmlwidgets`, I hope you will tolerate some of the flaws of this R package, and I will improve it in the future. Next, let’s use `hwordcloud`!

First, you can install it from `github`:

    devtools::install_github('czxa/hwordcloud')
    # or just use git
    devtools::install_git("https://github.com/czxa/hwordcloud.git")

Also, I made a shiny application example for this package:

    dir <- system.file("examples", "hwordcloud", package = "hwordcloud")
    setwd(dir)
    shiny::shinyAppDir(".")

Enjoy your use!

# Get Started

## A Basic example

We can use wordcloud2’s datesets to demonstrate：

    library(hwordcloud)
    library(wordcloud2)
    df <- head(demoFreq, 50)
    hwordcloud(text = df$word, size = df$freq,
               width = "100%", height = "200px")

## Theme Parameter

I hate complex codes, so I built some themes in this package. Just change theme parameter, you can render wordcloud in different apperance.

### darkgreen

    hwordcloud(text = df$word, size = df$freq,
               width = "100%", height = "300px",
               theme = "darkgreen")

### darkblue

    hwordcloud(text = df$word, size = df$freq,
               width = "100%", height = "300px",
               theme = "darkblue")

### avocado

    hwordcloud(text = df$word, size = df$freq,
               width = "100%", height = "300px",
               theme = "avocado")

### darkunica

    hwordcloud(text = df$word, size = df$freq,
               width = "100%", height = "300px",
               theme = "darkunica")

### gray

    hwordcloud(text = df$word, size = df$freq,
               width = "100%", height = "300px",
               theme = "gray")

### gridlight

    hwordcloud(text = df$word, size = df$freq,
               width = "100%", height = "300px",
               theme = "gridlight")

### grid

    hwordcloud(text = df$word, size = df$freq,
               width = "100%", height = "300px",
               theme = "grid")

### sandsignika

    hwordcloud(text = df$word, size = df$freq,
               width = "100%", height = "300px",
               theme = "sandsignika")

### sunset

    hwordcloud(text = df$word, size = df$freq,
               width = "100%", height = "300px",
               theme = "sunset")

## Other Parameter

Title and subtitle are also can be customized.

A complete example:

    hwordcloud(text = df$word, size = df$freq,
               width = "100%", height = "200px",
               theme = "sunset",
               title = "Word Cloud",
               titleAlign = "center",
               titleColor = "#333333",
               titleSize = "20px",
               subtitle = "czxa.top",
               subtitleColor = "#666666",
               subtitleAlign = "center",
               subtitleSize = "16px")

## Using `hwordcloud` within RMarkdown documents

Benefit from `htmlwidgets`, you can use `hwordcloud()` function in R Markdown document. For example, you can create a github document and code following codes in it, save it as a `.Rmd` documents, then `knit` it, you will find a word cloud embedded in it.

    hwordcloud(text = df$word, size = df$freq,
                   width = "100%", height = "400px",
                   theme = "sunset",
                   title = "Word Cloud",
                   titleAlign = "center",
                   titleColor = "#333333",
                   titleSize = "20px",
                   subtitle = "czxa.top",
                   subtitleColor = "#666666",
                   subtitleAlign = "center",
                   subtitleSize = "16px")

## Using `hwordcloud` within Shiny applications

Here is a very simple shiny example:

    library(shiny)
    library(wordcloud2)
    ui <- fluidPage(
        titlePanel("word cloud example"),
        mainPanel(
          hwordcloudOutput("shinytest", height = "500px")
        )
    )
    server <- function(input, output) {
        df <- head(demoFreq, 50)
        output$shinytest <- renderHwordcloud({
            hwordcloud(text = df$word, size = df$freq)
        })
    }
    shinyApp(ui = ui, server = server)