---
title: "Rendering Word Clouds"
author: "Zhenxing Cheng"
date: "`r Sys.Date()`"
output: rmarkdown::html_vignette
vignette: >
  %\VignetteIndexEntry{Rendering Word Clouds}
  %\VignetteEngine{knitr::rmarkdown}
  %\VignetteEncoding{UTF-8}
---

```{r setup, include = FALSE}
knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>"
)
```

# Introduction

The [htmlwidgets](https://github.com/ramnathv/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`: 

```{r eval=FALSE, include=TRUE}
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:

```{r eval=FALSE, include=TRUE}
dir <- system.file("examples", "hwordcloud", package = "hwordcloud")
setwd(dir)
shiny::shinyAppDir(".")
```

Enjoy your use!

# Get Started

## A Basic example

We can use [wordcloud2](https://github.com/Lchiffon/wordcloud2)'s datesets to demonstrate：

```{r echo=TRUE}
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

```{r echo=TRUE}
hwordcloud(text = df$word, size = df$freq, 
           width = "100%", height = "300px",
           theme = "darkgreen")
```

---

### darkblue

```{r echo=TRUE}
hwordcloud(text = df$word, size = df$freq, 
           width = "100%", height = "300px",
           theme = "darkblue")
```

---

### avocado

```{r echo=TRUE}
hwordcloud(text = df$word, size = df$freq, 
           width = "100%", height = "300px",
           theme = "avocado")
```

---

### darkunica

```{r echo=TRUE}
hwordcloud(text = df$word, size = df$freq, 
           width = "100%", height = "300px",
           theme = "darkunica")
```

---

### gray

```{r echo=TRUE}
hwordcloud(text = df$word, size = df$freq, 
           width = "100%", height = "300px",
           theme = "gray")
```

### gridlight

```{r echo=TRUE}
hwordcloud(text = df$word, size = df$freq, 
           width = "100%", height = "300px",
           theme = "gridlight")
```

---

### grid

```{r echo=TRUE}
hwordcloud(text = df$word, size = df$freq, 
           width = "100%", height = "300px",
           theme = "grid")
```


### sandsignika

```{r echo=TRUE}
hwordcloud(text = df$word, size = df$freq, 
           width = "100%", height = "300px",
           theme = "sandsignika")
```


### sunset

```{r echo=TRUE}
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: 

```{r echo=TRUE}
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.

```{r eval=FALSE}
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:

```{r eval=FALSE}
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)
```
